JS相关Web前端之路让前端飞

BOM模型

2017-10-02  本文已影响46人  FWHeart

BOM模型

浏览器对象模型(Browser Object Model),BOM对象是JavaScript的核心,该对象提供了与浏览器交互相关对象结构。BOM由多个子对象组成,其核心为window对象,它是BOM的顶层对象,表示在浏览器环境中的一个全局的顶级对象。除了window对象还具有frames、navigator、history、location、screen、document(DOM)。

window

window对象既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Gloal对象。

window.open() (返回打开的窗口的引用,即打开窗口的window对象)

原窗口以及弹窗有个属性指向打开他的原始窗口opener

var newWin = window.open("http://www.abc.com","newWin");
newWin.opener = null ;

浏览器内置程序屏蔽弹出窗口时,window.open()返回空,扩展程序阻止时会抛出错误。因此可以通过检测是否抛出异常,来判断弹窗是否被屏蔽。

其他常用的全局函数还有:(超时调用)setTimeout/clearTimeout;(间歇调用)setInterval/clearInterval;系统对话框(alert、prompt、confirm同步窗口,js执行停止);查找打印(print、find异步窗口,js执行不停止)

frames

对于使用框架集的页面,每一个frame都拥有自己的window对象,并保存在frames集合中。

<html>
<head></head>
<frameset rows="16,*">
    <frame src="frame.html" name="topFrame">
    <frame src="anotherframe.html" name="leftFrame">
</frameset>
</html>

可通过索引或框架名来访问。如:window.frames[“topFrame”],也可用top.frames[“topFrame”]进行访问

location

提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能。既是window对象的属性,也是document对象的属性

location对象具有以下属性:

location对象属性.png

改变浏览器位置方式:

navigator

navigator对象用于识别客户端浏览器

它具有很多与客户端浏览器相关的信息,比如:

检测插件(使用plugins数组)

//检测是否存在插件
//IE以外的插件
    function hasPlugin(name){
        name = name.toLowerCase();
        for(var i=0;i<navigator.plugins.length;i++){
            if(navigator.plugins[i].name.toLowerCase().indexOf(name)>-1){
                return true;
            }
        }
        return false;
    }
//检测IE中的插件
function hasIEPlugin(name){
    try{
        //参数name,插件对应的COM对象的标识符
        new ActiveXObject(name);
        return true;
    }catch(ex){
        return false;
    }
}

注册处理程序

//将http://www.somereader.com注册为RSS源处理程序,%s表示RSS源URL
navigator.registerContentHandler("application/rss+xml","http://www.somereader.com?feed=%s","Some Reader");
//将http://www.somemailclient.com注册为邮件处理程序,%s表示原始请求
navigator.registerProtocolHandler("mailto","http://www.somemailclient.com?cmd=%s","Some Mail Client");

history

history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起。

历史记录跳转

screen

screen对象中包含了用户显示器屏幕相关信息。通过该对象,可以访问用户显示器屏幕宽、高、色深等信息。

document

DOM可以认为是BOM的一个子集,DOM中有关文档操作相关对象,如:Node、Document、Element等DOM节点类型对象,都是做为window对象的子属性出现的。

document是window对象的了个属性,它是一个Document对象实例,表示当前窗口中文档对象。通过该对象,可以对文档和文档中元素、节点等进行操作。

其他

可视宽高

获取页面可视区域宽高

jQuery

$(window).width();
$(window).height();

原生JS

//不同浏览器下,取得页面视图大小
var clientWidth = window.innerWidth,clientHeight = window.innerHeight;
if(typeof clientWidth != "number"){
    //compatMode浏览器采用的渲染方式:BackCompact标准兼容模式关闭,CSS1Compat标准兼容模式开启
    if(document.compatMode == "CSS1Compat"){
        // 在页面指定了DOCTYPE时,需要使用这种方式来获取宽高
        clientWidth = document.documentElement.clientWidth;
        clientHeight = document.documentElement.clientHeight;
    }else{
        //有些浏览器用于保存初始的布局视图大小
        clientWidth = document.body.clientWidth;
        clientHeight = document.body.clientHeight;
    }
}

在页面指定了DOCTYPE时,需要使用document.documentElement这种方式来获取宽高,而不能使用document.body的方式来获取

文档宽高

获取整个文档的宽高

jQuery

$(document).height();
$(document).width();

原生JS

//compatMode浏览器采用的渲染方式:BackCompact标准兼容模式关闭,CSS1Compat标准兼容模式开启
if(document.compatMode == "CSS1Compat"){
    // 在页面指定了DOCTYPE时,需要使用这种方式来获取宽高
    pageWidth = document.documentElement.scrollWidth;
    pageHeight = document.documentElement.scrollHeight;
}else{
    //有些浏览器用于保存初始的布局视图大小
    pageWidth = document.body.scrollWidth;
    pageHeight = document.body.scrollHeight;
}

滚动宽高

获取滚动条到顶部或左边的宽度或高度

jQuery

$(document).scrollTop();
$(document).scrollLeft();

原生JS

//compatMode浏览器采用的渲染方式:BackCompact标准兼容模式关闭,CSS1Compat标准兼容模式开启
if(document.compatMode == "CSS1Compat"){
    // 在页面指定了DOCTYPE时,需要使用这种方式来获取宽高
    scrollHeight = document.documentElement.scrollTop;
    scrollWidth = document.documentElement.scrollLeft;
}else{
    //有些浏览器用于保存初始的布局视图大小
    scrollHeight = document.body.scrollTop;
    scrollWidth = document.body.scrollLeft;
}

参考文献

JS高程(第三版)
JavaScript BOM对象
jQuery获取宽高
js获取宽高

上一篇 下一篇

猜你喜欢

热点阅读