BOM模型

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对象)

  • 第一个参数:打开窗口的URL
  • 第二个参数:链接的目标,相当于a标签的target,当不存在target窗口时,将会创建一个窗口,以第二个参数命名;也可使用_self、_parent、_top或_blank等具有意义的参数
  • 第三个参数:设置浏览器窗口的样式,通过”,”分隔个属性,并且只有第二个窗口创建一个新窗口才有效
  • 第四个参数:是否打开一个新窗口,默认为是

原窗口以及弹窗有个属性指向打开他的原始窗口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”]进行访问

  • top:指向最外层的window
  • parent:父层的window
  • self:始终指向window(都是window的属性)

location

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

location对象具有以下属性:

location对象属性.png

改变浏览器位置方式:

  • assign():立即打开url,并在浏览器中生成一条记录(与给window.location设置url相同)
  • replace():立即打开url,并且不生成历史记录当前页面的历史记录
  • reload():重新加载当前页面,如果不传递true参数,并且参数无变化,从缓存中加载。
  • 通过改变location的属性,也会改变浏览器位置

navigator

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

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

  • appName 完整浏览器名
  • appVersion 浏览器的版本
  • cookieEnabled 表示cookie是否启用
  • javaEnabled() 表示当前浏览器是否启用了Java
  • language 浏览器主语言
  • onLine 浏览器是否连接到英特网
  • plugins 浏览器中安装的插件信息的数组
  • registerContentHandler() 针对特定的MIME类型将一个站点注册为处理程序
  • registerProtocolHanlder() 针对特定的协议将一个站点注册为处理程序

检测插件(使用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对象保存着用户上网的历史记录,从窗口被打开的那一刻算起。

历史记录跳转

  • back():后退一页,等价于go(-1)
  • forword():前进一页,等价于go(1)
  • go():前进或后退任意一页
  • length属性,保存着历史记录的数量。加载到窗口、标签页或框架中的第一个页面history.length等于0,有些浏览器等于1

screen

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

  • colorDepth 表现颜色的位数
  • height 屏幕的像素高度
  • width 屏幕的像素宽度

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获取宽高

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容