JavaScript中BOM知识总结

1 何为BOM

  • BOM(Browser Object Model)即浏览器对象模型。
  • BOM提供了独立于内容 而与浏览器窗口进行交互的对象;
  • 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window;
  • BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性;
  • BOM缺乏标准,JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3C,BOM最初是Netscape浏览器标准的一部分。

2 BOM学习内容

主要学习与浏览器窗口交互的一些对象,例如可以移动、调整浏览器大小的window对象,可以用于导航的location对象与history对象,可以获取浏览器、操作系统与用户屏幕信息的navigator与screen对象,可以使用document作为访问HTML文档的入口,管理框架的frames对象等。
BOM和DOM结构关系如下图所示:
这里写图片描述
BOM的核心是Window,而Window对象又具有双重角色,它既是通过js访问浏览器窗口的一个接口,又是一个Global(全局)对象。这意味着在网页中定义的任何对象,变量和函数,都以window作为其global对象。

Window对象包含属性:document、location、navigator、screen、history、frames;

Document根节点包含子节点:forms、location、anchors、images、links;

从window.document已然可以看出,DOM的最根本的对象是BOM的window对象的子对象。

区别:DOM描述了处理网页内容的方法和接口,BOM描述了与浏览器进行交互的方法和接口。

2.1 window对象

  • 所有浏览器都支持 window 对象,它表示浏览器窗口。
  • 所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。
  • 全局变量是 window 对象的属性。
  • 全局函数是 window 对象的方法。

window对象的属性:

属性描述
window指示当前窗口,与self等效
document对Document对象的只读引用,参阅Document对象
history对History对象的只读引用,参阅History对象
location用于窗口或框架的Location对象,参阅Location对象
screen对Screen对象的只读引用,参阅Screen对象
navigator对Navigator对象的只读引用,参阅Navigator对象
defaultStatus窗口底部状态栏显示的默认状态消息
innerheight / innerwidth返回窗口文档显示区的高度/宽度
outerheight / outerwidth返回窗口文外部的高度/宽度
pageXOffset / pageYOffset设置或返回当前页面相对于窗口显示区左上角的X/Y位置
parent指向包含另一个窗口的窗口(由框架使用)
top包含特定窗口的最顶层窗口
status描述由用户交互导致的状态栏的临时消息
frames窗口中的框架对象数组
length窗口中的框架数
offscreenBuffering用于绘制新窗口内容并在完成后复制已存在的内容,控制屏幕更新

window对象方法

方法描述
window.close()关闭窗口
window.alert(“message”)弹出一个具有OK按钮的系统消息框,显示指定的文本
window.confirm(“Are you sure?”)弹出一个具有OK和Cancel按钮的询问对话框,返回一个布尔值
window.prompt(“What’s your name?”, “Default”)提示用户输入信息,接受两个参数,即要显示给用户的文本和文本框中的默认值,将文本框中的值作为函数值返回
window.status可以使状态栏的文本暂时改变
window.defaultStatus默认的状态栏信息,可在用户离开当前页面前一直改变文本
window.setTimeout(“alert(‘xxx’)”, 1000)设置在指定的毫秒数后执行指定的代码,接受2个参数,要执行的代码和等待的毫秒数
window.clearTimeout(“ID”)取消还未执行的暂停,将暂停ID传递给它
window.setInterval(function, 1000)无限次地每隔指定的时间段重复一次指定的代码,参数同setTimeout()一样
window.clearInterval(“ID”)取消时间间隔,将间隔ID传递给它
window.history.go(-1)访问浏览器窗口的历史,负数为后退,正数为前进
window.history.back()同上
window.history.forward()同上
window.history.length可以查看历史中的页面数
clearInterval()取消由 setInterval() 设置的 timeout
clearTimeout()取消由 setTimeout() 方法设置的 timeout
createPopup()创建一个 pop-up 窗口
moveBy()可相对窗口的当前坐标把它移动指定的像素
moveTo()把窗口的左上角移动到一个指定的坐标
open()打开一个新的浏览器窗口或查找一个已命名的窗口
print()打印当前窗口的内容
resizeBy()按照指定的像素调整窗口的大小
resizeTo()把窗口的大小调整到指定的宽度和高度
scrollBy()按照指定的像素值来滚动内容
scrollTo()把内容滚动到指定的坐标
setInterval()按照指定的周期(以毫秒计)来调用函数或计算表达式
setTimeout(方法,秒数)在指定的毫秒数后调用函数或计算表达式
timeOutEvent = setTimeout(“longPress(‘” + obj + “’)”,1500)定时器传参数

注:setTimeout只执行一次code,如果要多次调用,可以让code自身再次调用setTimeout();setInteval()会不停地调用code,直到clearInterval()被调用。

  • 在使用框架时,每个框架都有自己的 window 对象以及所有原生构造函数及其他函数的副本。每个框架都保存在 frames 集合中,可以通过位置或通过名称来访问。
  • 有一些窗口指针,可以用来引用其他框架,包括父框架。
  • top 对象始终指向最外围的框架,也就是整个浏览器窗口。

窗口位置:
IE、Safari、Opera和Chrome 都提供了screenLeft 和 screenTop 属性,分别用于表示窗口相对于屏幕左边和上边的位置。Firefox 则在screenX 和 screenY 属性中提供相同的窗口位置信息,Safari和Chrome也同时支持这两个属性。Opera虽然也支持 screenX和screenY属性,但与screenLeft和screenTop属性并不对应。
可以使用如下方法跨浏览器获得窗口左边和上边位置:

var leftPos = (typeof window.screenLeft == "number") ?
                    window.screenLeft : window.screenX;
var topPos = (typeof window.screenTop == "number") ?
                    window.screenTop : window.screenY;

2.2 Location对象

location 对象是很特别的一个对象,因为它既是 window 对象的属性,也是
document 对象的属性。location 对象的属性有:

属性例子说明
hash“#contents”返回URL中的hash( #号后跟零或多个字符),如果URL中不包含散列,则返回空字符串
host“www.wrox.com:80”返回服务器名称和端口号(如果有)
hostname“www.wrox.com”返回不带端口号的服务器名称
href“http:/www.wrox.com”返回当前加载页面的完整URL。而location对象的toString()方法也返回这个值
pathname“/WileyCDA/”返回URL中的目录和(或)文件名
port“8080”返回URL中指定的端口号。如果URL中不包含端口号,则这个属性返回空字符串
protocol“http:”返回页面使用的协议。通常是http:或https:
search“?q=javascript”返回URL的查询字符串。这个字符串以问号开头

location.search 返回从问号到 URL 末尾的所有内容,解析查询字符串,然后返
回包含所有参数的一个对象。
与位置有关的方法
使用location.assign("http://www.wrox.com")可以立即打开新 URL 并在浏览器的历史记录中生成一条记录。等同于:

window.location = "http://www.wrox.com";
location.href = "http://www.wrox.com";

replace()方法可以导航到新页面,但不会在历史记录中生成新记录,不能回到前一个页面。
reload()方法作用是重新加载当前显示的页面。如果调用 reload()时不传递任何参数,页面就会以最有效的方式重新加载。也就是说,如果页面自上次请求以来并没有改变过,页面就会从浏览器缓存中重新加载。如果要强制从服务器重新加载,则需要为该方法传递参数 true。

location.reload(); //重新加载(有可能从缓存中加载)
location.reload(true); //重新加载(从服务器重新加载)

2.3 Navigator对象

navigator`对象:包含大量有关Web浏览器的信息,在检测浏览器及操作系统上非常有用。

2.4 Screen对象

用于获取某些关于用户屏幕的信息,也可用window.screen引用它。

2.5 History对象

history 对象有一个 length 属性,保存着历史记录的数量。这个数量包括所有历史记录,即所有向后和向前的记录。
go()方法可以在用户的历史记录中任意跳转,可以向后也可以向前。这个方法接受一个参数,表示向后或向前跳转的页面数的一个整数值。负数表示向后跳转,正数表示向前跳转。给go()方法传递一个字符串参数,此时浏览器会跳转到历史记录中包含该字符串的第一个位置——可能后退,也可能前进,具体要看哪个位置最近。如果历史记录中不包含该字符串,那么这个方法什么也不做。可以使用两个简写方法back()forward()来代替 go()
这里写图片描述
能力检测(特性检测)
两个原则:

  • 先检测达成目的的最常用的特性。先检测最常用的特性可以保证代码最优化,因为在多数情况下都可以避免测试多个条件。
  • 必须测试实际要用到的特性。一个特性存在,不一定意味着另一个特性也存在。

更可靠的方式是使用typeof 进行能力检测。

//检查 sort 是不是函数
function isSortable(object){
return typeof object.sort == "function";
}

在浏览器环境下测试任何对象的某个特性是否存在,要使用下面这个函数:

function isHostMethod(object, property) {
var t = typeof object[property];
return t=='function' ||(!!(t=='object' && object[property])) ||
                t=='unknown';
}

事件参数e
当事件发生的时候,系统会自动的给事件处理函数传递一个参数,会提供事件相关的一些数据,事件参数e浏览器的兼容性检测:

e = e || window.event

IE的document对象有一个all属性,它的里面存放了页面的所有标签,而其它浏览器是没有的,所以在IE中,事件对象的传播会绑定在全局的windows上,所以IE浏览器肯定是都支持window.event的;firefox只支持事件对象作为参数传入,而这又恰恰是IE6~8所无法实现的。IE9/chrome/opera/safari,则两种方式都支持。

获得计算后的样式方法
w3c标准:window.get ComputedStyle(element, null)[attr]
IE浏览器:element.currentStyle[attr]
兼容方法:

function getStyle(element, attr) {
        if(window.getComputedStyle) {
            return window.getComputedStyle(element, null)[attr];
        } else {
            return element.currentStyle[attr];
        }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值