什么是BOM
BOM:Browser Object Model 是瀏覽器對象模型己沛,瀏覽器對象模型提供了獨立與內(nèi)容的、可以與瀏覽器窗口進(jìn)行互動的對象結(jié)構(gòu),BOM由多個對象構(gòu)成迟杂,其中代表瀏覽器窗口的window對象是BOM的頂層對象棺禾,其他對象都是該對象的子對象缀蹄。
目前主流瀏覽器介紹
IE——11: 國內(nèi)用得最多的IE瀏覽器,歷來對W3C標(biāo)準(zhǔn)支持差膘婶。從IE10開始支持ES6標(biāo)準(zhǔn)缺前;
Sarafi:Apple的Mac系統(tǒng)自帶的基于Webkit內(nèi)核的瀏覽器,從OS X 10.7 Lion自帶的6.1版本開始支持ES6悬襟,目前最新的OS X 10.10 Yosemite自帶的Sarafi版本是8.x衅码,早已支持ES6;
Firefox:Mozilla自己研制的Gecko內(nèi)核和JavaScript引擎OdinMonkey脊岳。早期的Firefox按版本發(fā)布逝段,后來終于聰明地學(xué)習(xí)Chrome的做法進(jìn)行自升級,時刻保持最新割捅;
移動設(shè)備上目前iOS和Android兩大陣營分別主要使用Apple的Safari和Google的Chrome奶躯,由于兩者都是Webkit核心,結(jié)果HTML5首先在手機(jī)上全面普及(桌面絕對是Microsoft拖了后腿)亿驾,對JavaScript的標(biāo)準(zhǔn)支持也很好嘹黔,最新版本均支持ES6。
這里為什么沒有說到360瀏覽器莫瞬、搜狗瀏覽器呢儡蔓?其實這一類瀏覽器只是在以上列舉出來的瀏覽器的內(nèi)核基礎(chǔ)上醉锄,換了一個包裝,添加了一些個性功能而已浙值,本質(zhì)上并沒有什么區(qū)別恳不。
可以操作的BOM對象
window對象
所有瀏覽器都支持 window 對象。它表示瀏覽器窗口开呐。
所有 JavaScript 全局對象烟勋、函數(shù)以及變量均自動成為 window 對象的成員。
全局變量是 window 對象的屬性筐付。
全局函數(shù)是 window 對象的方法卵惦。
甚至 HTML DOM 的 document 也是 window 對象的屬性之一:
window.document.getElementById("header");
與此相同:
document.getElementById("header");
window尺寸
有三種方法能夠確定瀏覽器窗口的尺寸(瀏覽器的視口,不包括工具欄和滾動條)瓦戚。
對于Internet Explorer沮尿、Chrome、Firefox较解、Opera 以及 Safari:
window.innerHeight - 瀏覽器窗口的內(nèi)部高度
window.innerWidth - 瀏覽器窗口的內(nèi)部寬度
對于 Internet Explorer 8畜疾、7、6印衔、5:
document.documentElement.clientHeight
document.documentElement.clientWidth
或者
document.body.clientHeight
document.body.clientWidth
實用的 JavaScript 方案(涵蓋所有瀏覽器):
var w=window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
var h=window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
x=document.getElementById("demo");
x.innerHTML="瀏覽器的內(nèi)部窗口寬度:" + w + "啡捶,高度:" + h + "。"
該例顯示瀏覽器窗口的高度和寬度:(不包括工具欄/滾動條)
除此之外奸焙,還有一個outerWidth和outerHeight屬性瞎暑,可以獲取瀏覽器窗口的整個寬高。
其他操作window方法(不常用)
window.open() - 打開新窗口
window.close() - 關(guān)閉當(dāng)前窗口
window.moveTo() - 移動當(dāng)前窗口
window.resizeTo() - 調(diào)整當(dāng)前窗口的尺寸
navigator
navigator對象表示瀏覽器的信息与帆,最常用的屬性包括:
navigator.appName:瀏覽器名稱了赌;
navigator.appVersion:瀏覽器版本;
navigator.language:瀏覽器設(shè)置的語言玄糟;
navigator.platform:操作系統(tǒng)類型勿她;
navigator.userAgent:瀏覽器設(shè)定的User-Agent字符串。
window.navigator 對象在編寫時可不使用 window 這個前綴茶凳。
示例:
txt = "
Browser CodeName: " + navigator.appCodeName + "
";txt+= "
Browser Name: " + navigator.appName + "
";txt+= "
Browser Version: " + navigator.appVersion + "
";txt+= "
Cookies Enabled: " + navigator.cookieEnabled + "
";txt+= "
Platform: " + navigator.platform + "
";txt+= "
User-agent header: " + navigator.userAgent + "
";txt+= "
User-agent language: " + navigator.systemLanguage + "
";document.getElementById("example").innerHTML=txt;
注意
來自 navigator 對象的信息具有誤導(dǎo)性嫂拴,不應(yīng)該被用于檢測瀏覽器版本,這是因為:
navigator 數(shù)據(jù)可被瀏覽器使用者更改
瀏覽器無法報告晚于瀏覽器發(fā)布的新操作系統(tǒng)
screen
screen對象表示屏幕的信息贮喧,常用的屬性有:
screen.width:屏幕寬度筒狠,以像素為單位;
screen.availWidth:屏幕的可用寬度箱沦,以像素為單位
screen.height:屏幕高度辩恼,以像素為單位;
screen.availHeight:屏幕的可用高度,以像素為單位
screen.colorDepth:返回顏色位數(shù)灶伊,如8疆前、16、24聘萨。
window.screen 對象在編寫時可以不使用 window 這個前綴竹椒。
document.write( "屏幕寬度:"+screen.width+"px
" );
document.write( "屏幕高度:"+screen.height+"px
" );
document.write( "屏幕可用寬度:"+screen.availWidth+"px
" );
document.write( "屏幕可用高度:"+screen.availHeight+"px" );
Location
location對象表示當(dāng)前頁面的URL信息。例如米辐,一個完整的URL:
http://www.example.com:8080/path/index.html?a=1&b=2#TOP
可以用location.href獲取:
document.write(location.href);
要獲得URL各個部分的值胸完,可以這么寫:
location.protocol; // 'http'
location.host; // 'www.example.com'
location.port; // '8080'
location.pathname; // '/path/index.html'
location.search; // '?a=1&b=2'
location.hash; // 'TOP'
要加載一個新頁面,可以調(diào)用location.assign()翘贮。如果要重新加載當(dāng)前頁面赊窥,調(diào)用location.reload()方法非常方便。
示例:加載一個新頁面
function newDoc()
{
window.location.assign("http://www.w3school.com.cn")
}
History
history對象保存了瀏覽器的歷史記錄狸页,JavaScript可以調(diào)用history對象的back()或forward ()锨能,相當(dāng)于用戶點擊了瀏覽器的“后退”或“前進(jìn)”按鈕。
History Back
history.back() 方法加載歷史列表中的前一個 URL芍耘。
這與在瀏覽器中點擊后退按鈕是相同的:
function goBack()
? {
? window.history.back()
? }
History Forward
history forward() 方法加載歷史列表中的下一個 URL址遇。
這與在瀏覽器中點擊前進(jìn)按鈕是相同的:
function goForward()
? {
? window.history.forward()
? }
注意
這個對象屬于歷史遺留對象,對于現(xiàn)代Web頁面來說齿穗,由于大量使用AJAX和頁面交互傲隶,簡單粗暴地調(diào)用history.back()可能會讓用戶感到非常憤怒。
新手開始設(shè)計Web頁面時喜歡在登錄頁登錄成功時調(diào)用history.back()窃页,試圖回到登錄前的頁面。這是一種錯誤的方法复濒。
任何情況脖卖,你都不應(yīng)該使用history這個對象了。
拓展
系統(tǒng)對話框
alert()警告框巧颈,沒有返回值
confirm('提問的內(nèi)容')返回boolean
prompt(),輸入框,返回字符串或null
window對象常用事件
onload:當(dāng)頁面加載時
onscroll:當(dāng)頁面滾動時
onresize:頁面重新定義大小時