BOM(Browser Object Model)也叫浏览器对象,它提供了很多对象,用于访问浏览器的功能。但是BOM是没有标准的,每一个浏览器厂家会根据自己的需求来扩展BOM对象。本文主要以一些简单的小例子,简述前端开发中BOM的相关基础知识,仅供学习分享使用,如有不足之处,还请指正。

概述

window对象是最顶层的对象,旗下还有6大属性,也都是对象。document对象下也有5大属性,同样都是对象。window的属性和方法,可以采用:window.属性,或 window.方法()进行调用,或者直接调用。BOM结构图,如下所示:

window对话框

window提供的默认对话共三种:系统对话框(alert),选择对话框(confirm),输入对话框(prompt),如下所示:

 //系统对话框
alert('Hello world!!!'); //弹出一个对话框,只有一个确定按钮,没有返回值。
//选择对话框,有两个按钮,确定和取消。本身可以返回bool类型的结果,如果确定,返回true,否则返回false
document.writeln( confirm('Are you sure ?'));//点确定,输出true ;取消,输出:false
//输入框,需要用户输入值,输入的数据类型不限
document.writeln(prompt('Plese input a value:',''));//点确定:返回输入的值;点取消,返回null。

打开窗口

通过调用window.open方法,打开新的窗口。open方法共3个参数:1、新窗口的URL 2、窗口名称或目标 3、设置窗口属性 。如下所示:

 window.open('http://www.baidu.com'); //打开新窗口
window.open('http://www.baidu.com','baidu');//新打开窗口的名称,凡是打开相同名称的窗口,则会原有窗口中重新加载。
window.open('http://www.baidu.com','_black');//在新窗口中打开并加载,也是只会打开一个
window.open('http://www.baidu.com','_parent');//在本窗口中加载

第三个参数,是窗口的一些特征,如宽,高,坐标,等。用逗号隔开。如下所示:

 var box=window.open('http://wwww.baidu.com','baidu','width=400,height=400,top=100,left=100,location=yes');
document.writeln(box);//输出:[object Window] 即,open默认返回子窗口的window对象。
box.alert('show!!!');//由于跨域,则默认浏览器拒绝访问
var box=window.open('index.html','baidu','width=400,height=400,top=100,left=100,location=yes');
box.alert('show!!!');//不跨域,则可以访问
window.opener.document.writeln('访问父窗口');//通过window.opener访问父窗口

open方法默认返回新窗口的window对象,可以通过返回值来访问子窗口内容。

窗口的位置

用于获取和设置窗口的位置(左上角的起始坐标),主要通过screenLeft、screenTop和screenX、screenY来访问,如下所示:

 document.writeln(window.screenLeft);//左边坐标,此属性firefox不支持
document.writeln(window.screenTop);//上边坐标,此属性firefox不支持
document.writeln(window.screenX);//左边坐标,此属性firefox支持,IE9以上也支持
document.writeln(window.screenY);//上边坐标,此属性firefox支持,IE9以上也支持

以上属性有的浏览器不支持,可以判断返回值是否是number类型来区分,如下所示:

 var left=typeof window.screenLeft=='number'?window.screenLeft:window.screenX;
var top=typeof window.screenTop=='number'?window.screenTop:window.screenY;
document.writeln('left='+left+',top='+top);//输出:left=0,top=109

窗口大小

窗口的大小,主要通过innerWidth、innderHeight和outerWidth、outerHeight来设置和获取。如下所示:

 document.writeln(window.innerWidth);//,IE9以上也支持 内窗口显示区大小
document.writeln(window.innerHeight);//,IE9以上也支持 内窗口显示区大小
document.writeln(window.outerWidth);//,IE9以上也支持 ,外窗口整体大小,包含工具栏和边框
document.writeln(window.outerHeight);//,IE9以上也支持,外窗口整体大小,包含工具栏和边框
document.writeln(document.documentElement.clientWidth);//获取document的宽度 和innderWidth效果一样
document.writeln(document.documentElement.clientHeight);//获取document的高度 和innderHeight效果一样

如何跨浏览器获取窗口大小,可以通过document.compatMode判断浏览器的模式,如下所示:

 var width=window.innerWidth;
var height=window.innerHeight;
if(typeof width !='number'){
if(document.compatMode=='CSS1Compat'){
//如果就标准模式
width=document.documentElement.clientWidth;
height=document.documentElement.clientHeight;
}else{
width=document.body.clientWidth;
height=document.body.clientHeight
}
}
document.writeln('width='+width+',height='+height);//输出:width=1366,height=620

窗口的移动和重置大小

通过moveTo、moveBy和resizeTo、resizeBy来设置窗口的大小和移动位置,如下所示:

 window.moveTo(100,100);//移动到某个位置,目前都不支持,不起作用
window.moveBy(10,10);//每次刷新移动多少位置,目前都不支持,不起作用
window.resizeTo(300,300);//调整窗口大小,第一次打开起作用,后面再刷新不起作用
window.resizeBy(10,10);//重新设置窗口的大小,目前不起作用

window定时器

window的定时器一共有两种:1、超时操作(setTimeOut) 2、间歇操作(setTimeInterval)。

超时操作:第一个参数:可以执行的代码块字符串,第二个参数:超时时间,单位毫秒。如下所示:

 //超时操作:第一个参数:可以执行的代码块字符串,第二个参数:超时时间,单位毫秒
setTimeout('alert("hello js!!!")',2000);
//但是不建议上述写法:不容易扩展,容易出错。可以采用如下方法:
function box(){
alert('hello js !!!');
}
setTimeout(box,2000);

但是上述方法就分开的,不是一个整体,推荐采用如下方式优化:

 var box= setTimeout(function() {
alert('hello js !!!');
}, 2000);//推荐写法:扩展性好,封装性也好
//box表示超时执行的id
document.writeln(box);
clearTimeout(box);//可以取消超时调用执行计划

备注:超时操作通过clearTimeout来取消操作,参数为超时操作返回的id。

间歇调用,可以重复执行,定时执行,如下所示:间隔200毫秒,输出1到5。

 var num=0;
var max=5;
function bb(){
num++;
//document.writeln(num);//不可以用wirteln
document.getElementById('A01').innerText=num;
if(num==max){
clearInterval(box);
}
}
var box = setInterval(bb,200);

上述例子,也可以通过超时调用,模拟间歇调用,如下所示:

 var num=0;
var max=5;
var box=0;
function bb(){
num++;
//document.writeln(num);//不可以用wirteln
document.getElementById('A01').innerText=num;
if(num==max){
clearTimeout(box);
}else{
box=setTimeout(bb,200);
}
}
box = setTimeout(bb,200);

location对象

javascript中location地址对象描述的是某一个窗口对象所打开的地址。如下所示:

 document.writeln(window.location);//返回当前的路径
document.writeln(document.location);//返回当前的路径
window.location.hash="#66";//设置锚点,会跳转到新的页面,#可以不带,会默认带上
document.writeln(window.location.hash);//返回路径的锚点,#66
//端口
document.writeln(window.location.port);//返回当前访问的路径的端口
window.location.port=8888;//如果设置端口,则会跳转到对应的端口
document.writeln(window.location.search);//返回路径中?后面的信息,如:?__hbt=1581605601724
window.location.assign('http://www.baidu.com');//可以实现跳转到指定的url功能
window.location.href='http://www.baidu.com'; //同样可以跳转

重新加载,通过reload来实现,如下所示:

 window.location.reload();//进行重新加载,可能是从缓存中加载
window.location.reload(true);//强制从后台加载
window.location.replace('http://www.baidu.com');//在当前页面替换当前url到新的url并重新加载的方法

history对象

主要用于访问历史记录,如:前进、后退、跳转等,如下所示:

 document.writeln(window.history.length);//返回历史记录的属性
window.history.back();//往后退
window.history.forward();//前进
window.history.go(-1);//跳转到指定的页数,负数往后退,正数往前进

navigator对象

navigator对象包含访问者客户端的相关信息,且navigator对象的实例的唯一的,如下所示:

 document.writeln(window.navigator.appName);//完整浏览器名称,IE输出:Netscape ,不能精确的输出浏览器
document.writeln(window.navigator.userAgent);
//http头代理名称,IE输出:Netscape Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; rv:11.0) like Gecko
document.writeln(window.navigator.platform);//浏览器操作系统的平台,输出:Win64
//插件列表
document.writeln(window.navigator.plugins.length);//插件个数

通过navigator对象输出浏览器的插件信息,如下所示:

 for(var i=0;i<window.navigator.plugins.length;i++){
document.writeln('插件名称:'+window.navigator.plugins[i].name);
document.writeln('插件文件名:'+window.navigator.plugins[i].filename);
document.writeln('插件描述:'+window.navigator.plugins[i].description);
document.writeln('插件版本'+window.navigator.plugins[i].version);
document.writeln('<br />');
}

浏览器支持的MIME类型,如下所示:

 document.writeln(window.navigator.mimeTypes.length);//4
for(var i=0;i<window.navigator.mimeTypes.length;i++){
document.writeln(' mime名称:'+window.navigator.mimeTypes[i].type);
document.writeln(' mime描述:'+window.navigator.mimeTypes[i].description);
document.writeln(' mime后缀:'+window.navigator.mimeTypes[i].suffixes);
document.writeln('<br />');
}

备注

至于其他浏览器对象,用到的不是很多,暂不介绍。

生命赋予了我们灵魂,却没有教会我们如何走,关于情感的路,需要的是两个人风雨同舟。

JavaScript之BOM基础的更多相关文章

  1. 从头开始学JavaScript 笔记(一)——基础中的基础

    原文:从头开始学JavaScript 笔记(一)--基础中的基础 概要:javascript的组成. 各个组成部分的作用 . 一.javascript的组成   javascript   ECMASc ...

  2. javascript之BOM对象(一window对象)

    javascript包含三个部分,ECMAScript,BOM和DOM.ECMAScript是javascript的核心,包含javascript的基础语法.在Web中使用javascript,BOM ...

  3. JavaScript学习02 基础语法

    JavaScript学习02 基础语法 JavaScript中很多基础内容和Java中大体上基本一样,所以不需要再单独重复讲了,包括: 各种算术运算符.比较运算符.逻辑运算符: if else语句.s ...

  4. 第一百一十一节,JavaScript,BOM浏览器对象模型

    JavaScript,BOM浏览器对象模型 学习要点: 1.window对象 2.location对象 3.history对象 BOM也叫浏览器对象模型,它提供了很多对象,用于访问浏览器的功能.BOM ...

  5. BOM基础(四)

    最近写的文章感觉内容不像之前那么充实,内容可能也有点杂.对于DOM,和BOM来说,要理解是不难的,难的是做的时候.要自己想的到,而且,对于目前阶段来说,BOM还存在着很大的兼容性问题,最主要就是要兼容 ...

  6. 第三章 JavaScript操作BOM对象

    第三章   JavaScript操作BOM对象 一.window对象 浏览器对象模型(BOM)是javascript的组成之一,它提供了独立与浏览器窗口进行交换的对象,使用浏览器对象模型可以实现与HT ...

  7. BOM基础 计时器 定时器 DOM 基础

    -------------------------------------------滴水穿石,我心永恒. day48 CSSJS 1 ECMA script 2 BOM browser object ...

  8. javascript之正则表达式基础知识小结

    javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料.   元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要 ...

  9. JavaScript的BOM和DOM

    JavaScript的BOM和DOM 1,window对象,所有浏览器都支持window对象,它表示浏览器窗口 BOM(browser Object Model)是指浏览器对象模型,它使JavaScr ...

随机推荐

  1. qt中的拖拽及其使用技巧

    关于qt中的拖放操作,首先可以看这篇官方文档:http://doc.qt.io/qt-5.5/dnd.html 一.QDrag 首先是创建QDrag,可以在mousePressEvent或者mouse ...

  2. 网络io模型总结

    操作系统基本概念 首先来来说下操作系统,嗯,操作系统是计算机硬件的管理软件,是对计算机硬件的抽象,操作系统将应用程序分为用户态和内核态,例如驱动程序就位于内核态,而我们写的一般程序都是用户态,包括we ...

  3. Qt Installer Framework翻译(7-5)

    操作 这些操作由组件和控制脚本准备,并由安装程序执行. 注意:操作是通过线程执行的. 在内部,每个操作都有一个DO步骤,包含有关安装程序的说明,以及一个UNDO步骤,包含有关卸载程序的说明. 操作总结 ...

  4. [模板]线性递推+BM

    暴力版本: #include<bits/stdc++.h> #define mod 998244353 using namespace std; typedef long long int ...

  5. 面试系列-面试官:你能给我解释一下javascript中的this吗?

    一.前言 关于javascript中的this对象,可能已经被大家说烂了. 即使是这样,我依然决定将这篇文章给水出来.毕竟全国在新型肺炎的影响下,公司没法正常复工. 除了刷刷手机,还是要适当的学习一下 ...

  6. html中如何清除浮动

    在html中,浮动可以说是比较常用的.在页面的布局中他有着很大的作用,但是浮动中存在的问题也是比较多的.现在我们简单说一下怎么去除浮动 首先我们先简单的看一下浮动: 首先我们先创建一个简单的div,并 ...

  7. 3d动态文字的绘制

    在这里介绍一种3D文字的一种动态效果,可以说这是一种伪3D创建的一种3D的视觉效果 简单的讲解一下:大家或多或少都会听说过素描这种绘画手法,其实这种手法就是巧妙的利用了.阴影给人们带来的立体的视觉冲击 ...

  8. php--->使用callable强制指定回调类型

    php 使用callable强制指定回调类型 如果一个方法需要接受一个回调方法作为参数,我们可以这样写 <?php function dosth($callback){ call_user_fu ...

  9. Referer防盗链

    一.目录展示 分为AProject和BProject两个项目进行测试 二.修改c:\windows\system32\drivers\etc下的hosts文件 三.aindex.jsp 四.binde ...

  10. python之路:day2

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...