BOM模型

BOM模型

瀏覽器對(duì)象模型(Browser Object Model),BOM對(duì)象是JavaScript的核心氓皱,該對(duì)象提供了與瀏覽器交互相關(guān)對(duì)象結(jié)構(gòu)路召。BOM由多個(gè)子對(duì)象組成,其核心為window對(duì)象波材,它是BOM的頂層對(duì)象股淡,表示在瀏覽器環(huán)境中的一個(gè)全局的頂級(jí)對(duì)象。除了window對(duì)象還具有frames各聘、navigator揣非、history、location躲因、screen早敬、document(DOM)忌傻。

window

window對(duì)象既是通過JavaScript訪問瀏覽器窗口的一個(gè)接口,又是ECMAScript規(guī)定的Gloal對(duì)象。

window.open() (返回打開的窗口的引用,即打開窗口的window對(duì)象)

  • 第一個(gè)參數(shù):打開窗口的URL
  • 第二個(gè)參數(shù):鏈接的目標(biāo),相當(dāng)于a標(biāo)簽的target,當(dāng)不存在target窗口時(shí),將會(huì)創(chuàng)建一個(gè)窗口,以第二個(gè)參數(shù)命名;也可使用_self搞监、_parent水孩、_top或_blank等具有意義的參數(shù)
  • 第三個(gè)參數(shù):設(shè)置瀏覽器窗口的樣式,通過”,”分隔個(gè)屬性,并且只有第二個(gè)窗口創(chuàng)建一個(gè)新窗口才有效
  • 第四個(gè)參數(shù):是否打開一個(gè)新窗口,默認(rèn)為是

原窗口以及彈窗有個(gè)屬性指向打開他的原始窗口opener

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

瀏覽器內(nèi)置程序屏蔽彈出窗口時(shí),window.open()返回空,擴(kuò)展程序阻止時(shí)會(huì)拋出錯(cuò)誤。因此可以通過檢測(cè)是否拋出異常,來判斷彈窗是否被屏蔽琐驴。

其他常用的全局函數(shù)還有:(超時(shí)調(diào)用)setTimeout/clearTimeout俘种;(間歇調(diào)用)setInterval/clearInterval;系統(tǒng)對(duì)話框(alert绝淡、prompt宙刘、confirm同步窗口,js執(zhí)行停止)牢酵;查找打印(print悬包、find異步窗口,js執(zhí)行不停止)

frames

對(duì)于使用框架集的頁面馍乙,每一個(gè)frame都擁有自己的window對(duì)象,并保存在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”]進(jìn)行訪問

  • top:指向最外層的window
  • parent:父層的window
  • self:始終指向window(都是window的屬性)

location

提供了與當(dāng)前窗口中加載的文檔有關(guān)的信息,還提供了一些導(dǎo)航功能丝格。既是window對(duì)象的屬性,也是document對(duì)象的屬性

location對(duì)象具有以下屬性:

location對(duì)象屬性.png

改變?yōu)g覽器位置方式:

  • assign():立即打開url,并在瀏覽器中生成一條記錄(與給window.location設(shè)置url相同)
  • replace():立即打開url,并且不生成歷史記錄當(dāng)前頁面的歷史記錄
  • reload():重新加載當(dāng)前頁面,如果不傳遞true參數(shù),并且參數(shù)無變化,從緩存中加載撑瞧。
  • 通過改變location的屬性,也會(huì)改變?yōu)g覽器位置

navigator

navigator對(duì)象用于識(shí)別客戶端瀏覽器

它具有很多與客戶端瀏覽器相關(guān)的信息,比如:

  • appName 完整瀏覽器名
  • appVersion 瀏覽器的版本
  • cookieEnabled 表示cookie是否啟用
  • javaEnabled() 表示當(dāng)前瀏覽器是否啟用了Java
  • language 瀏覽器主語言
  • onLine 瀏覽器是否連接到英特網(wǎng)
  • plugins 瀏覽器中安裝的插件信息的數(shù)組
  • registerContentHandler() 針對(duì)特定的MIME類型將一個(gè)站點(diǎn)注冊(cè)為處理程序
  • registerProtocolHanlder() 針對(duì)特定的協(xié)議將一個(gè)站點(diǎn)注冊(cè)為處理程序

檢測(cè)插件(使用plugins數(shù)組)

//檢測(cè)是否存在插件
//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;
    }
//檢測(cè)IE中的插件
function hasIEPlugin(name){
    try{
        //參數(shù)name,插件對(duì)應(yīng)的COM對(duì)象的標(biāo)識(shí)符
        new ActiveXObject(name);
        return true;
    }catch(ex){
        return false;
    }
}

注冊(cè)處理程序

//將http://www.somereader.com注冊(cè)為RSS源處理程序,%s表示RSS源URL
navigator.registerContentHandler("application/rss+xml","http://www.somereader.com?feed=%s","Some Reader");
//將http://www.somemailclient.com注冊(cè)為郵件處理程序,%s表示原始請(qǐng)求
navigator.registerProtocolHandler("mailto","http://www.somemailclient.com?cmd=%s","Some Mail Client");

history

history對(duì)象保存著用戶上網(wǎng)的歷史記錄,從窗口被打開的那一刻算起显蝌。

歷史記錄跳轉(zhuǎn)

  • back():后退一頁,等價(jià)于go(-1)
  • forword():前進(jìn)一頁,等價(jià)于go(1)
  • go():前進(jìn)或后退任意一頁
  • length屬性,保存著歷史記錄的數(shù)量预伺。加載到窗口、標(biāo)簽頁或框架中的第一個(gè)頁面history.length等于0,有些瀏覽器等于1

screen

screen對(duì)象中包含了用戶顯示器屏幕相關(guān)信息琅束。通過該對(duì)象扭屁,可以訪問用戶顯示器屏幕寬、高涩禀、色深等信息。

  • colorDepth 表現(xiàn)顏色的位數(shù)
  • height 屏幕的像素高度
  • width 屏幕的像素寬度

document

DOM可以認(rèn)為是BOM的一個(gè)子集然眼,DOM中有關(guān)文檔操作相關(guān)對(duì)象艾船,如:Node、Document高每、Element等DOM節(jié)點(diǎn)類型對(duì)象屿岂,都是做為window對(duì)象的子屬性出現(xiàn)的。

document是window對(duì)象的了個(gè)屬性鲸匿,它是一個(gè)Document對(duì)象實(shí)例爷怀,表示當(dāng)前窗口中文檔對(duì)象。通過該對(duì)象带欢,可以對(duì)文檔和文檔中元素运授、節(jié)點(diǎn)等進(jìn)行操作烤惊。

其他

可視寬高

獲取頁面可視區(qū)域?qū)捀?/p>

jQuery

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

原生JS

//不同瀏覽器下,取得頁面視圖大小
var clientWidth = window.innerWidth,clientHeight = window.innerHeight;
if(typeof clientWidth != "number"){
    //compatMode瀏覽器采用的渲染方式:BackCompact標(biāo)準(zhǔn)兼容模式關(guān)閉,CSS1Compat標(biāo)準(zhǔn)兼容模式開啟
    if(document.compatMode == "CSS1Compat"){
        // 在頁面指定了DOCTYPE時(shí),需要使用這種方式來獲取寬高
        clientWidth = document.documentElement.clientWidth;
        clientHeight = document.documentElement.clientHeight;
    }else{
        //有些瀏覽器用于保存初始的布局視圖大小
        clientWidth = document.body.clientWidth;
        clientHeight = document.body.clientHeight;
    }
}

在頁面指定了DOCTYPE時(shí)吁朦,需要使用document.documentElement這種方式來獲取寬高柒室,而不能使用document.body的方式來獲取

文檔寬高

獲取整個(gè)文檔的寬高

jQuery

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

原生JS

//compatMode瀏覽器采用的渲染方式:BackCompact標(biāo)準(zhǔn)兼容模式關(guān)閉,CSS1Compat標(biāo)準(zhǔn)兼容模式開啟
if(document.compatMode == "CSS1Compat"){
    // 在頁面指定了DOCTYPE時(shí),需要使用這種方式來獲取寬高
    pageWidth = document.documentElement.scrollWidth;
    pageHeight = document.documentElement.scrollHeight;
}else{
    //有些瀏覽器用于保存初始的布局視圖大小
    pageWidth = document.body.scrollWidth;
    pageHeight = document.body.scrollHeight;
}

滾動(dòng)寬高

獲取滾動(dòng)條到頂部或左邊的寬度或高度

jQuery

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

原生JS

//compatMode瀏覽器采用的渲染方式:BackCompact標(biāo)準(zhǔn)兼容模式關(guān)閉,CSS1Compat標(biāo)準(zhǔn)兼容模式開啟
if(document.compatMode == "CSS1Compat"){
    // 在頁面指定了DOCTYPE時(shí)逗宜,需要使用這種方式來獲取寬高
    scrollHeight = document.documentElement.scrollTop;
    scrollWidth = document.documentElement.scrollLeft;
}else{
    //有些瀏覽器用于保存初始的布局視圖大小
    scrollHeight = document.body.scrollTop;
    scrollWidth = document.body.scrollLeft;
}

參考文獻(xiàn)

JS高程(第三版)
JavaScript BOM對(duì)象
jQuery獲取寬高
js獲取寬高

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雄右,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子纺讲,更是在濱河造成了極大的恐慌擂仍,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熬甚,死亡現(xiàn)場(chǎng)離奇詭異防楷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)则涯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門复局,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人粟判,你說我怎么就攤上這事亿昏。” “怎么了档礁?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵角钩,是天一觀的道長。 經(jīng)常有香客問我呻澜,道長递礼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任羹幸,我火速辦了婚禮脊髓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栅受。我一直安慰自己将硝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布屏镊。 她就那樣靜靜地躺著依疼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪而芥。 梳的紋絲不亂的頭發(fā)上律罢,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音棍丐,去河邊找鬼误辑。 笑死沧踏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稀余。 我是一名探鬼主播悦冀,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼睛琳!你這毒婦竟也來了盒蟆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤师骗,失蹤者是張志新(化名)和其女友劉穎历等,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辟癌,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寒屯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了黍少。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寡夹。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖厂置,靈堂內(nèi)的尸體忽然破棺而出菩掏,到底是詐尸還是另有隱情,我是刑警寧澤昵济,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布智绸,位于F島的核電站,受9級(jí)特大地震影響访忿,放射性物質(zhì)發(fā)生泄漏瞧栗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一海铆、第九天 我趴在偏房一處隱蔽的房頂上張望迹恐。 院中可真熱鬧,春花似錦游添、人聲如沸系草。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至唇辨,卻和暖如春廊酣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赏枚。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工亡驰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晓猛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓凡辱,卻偏偏與公主長得像戒职,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子透乾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容