BOM簡介javascript
BOM:Broswer Object Model 瀏覽器對象模型html
在JavaScript中能夠大概的理解爲,就是window對象,用來進行與瀏覽器相關的一些操做java
學習BOM就是學習 JavaScript中的window對象web
寫做背景編程
看過
《你不知道的JavaScript》
的小夥伴都知道,書中有個這樣的公式JavaScript = ES + DOM + BOM
瀏覽器ES 和 DOM都是咱們耳熟能詳的,在平常的開發中也是這樣,絕大部分時間都在使用 ES + DOM的語法進行編程。BOM偶爾會用一下,忽然想寫這一篇筆記的原因是由於前幾天差點由於這一塊知識的不熟悉,形成一個生產bug,好在線上測試的時候被測試同窗發現了,否則得背大鍋。緩存
通過這樣一個事件,本身也在腦海裏回憶了一些,對這一塊的知識也是剛入門的時候,系統的過了一遍,大部分的知識都遺忘的差很少,甚至有時候須要用到的時候,百度關鍵詞都有點費勁。綜上所述,就頗有必要把這一塊的知識從新學習一遍,加深記憶的同時,造成本身的筆記產出。服務器
注:本系列文章是我的複習及提高類型筆記,簡單的例子和概念不會展開說明,重點記錄關鍵信息和重要概念,請知悉markdown
BOM的核心對象是 window,它表明瀏覽器的一個實例。框架
在瀏覽器中,window有着雙重的角色:JavaScript訪問瀏覽器的接口對象,ES中的Global對象
這意味着網頁中的任何一個對象,變量,函數都是以window做爲其Global對象
-- 《JavaScript高級程序設計》
通俗來說就是,網頁中的全部變量,對象,函數等,最終都是window對象的子屬性
在ECMAScript中,window對象扮演着Global對象的角色,也就是說,全部在全局做用域聲明的變量,函數都會變成window的屬性和方法,均可以經過 window.屬性名(或方法名)
直接調用
如下幾點須要注意
window.attr
聲明的變量和 var
聲明的變量有個區別,使用 var
聲明的變量,不能使用 delete
刪除,使用 window.
聲明的變量能夠被刪除window
對象查詢未聲明的變量,只會返回 undefined
經過
window.open()
既能夠導航到一個特定的URL,也能夠打開一個新的瀏覽器窗口該函數接收四個參數:
- URL
- 窗口目標
- 一個新窗口的特性字符串,例:
'height=400,width=400,top=10,left=10,resizable=yes'
- 布爾值,是否取代當前頁面(僅在不打開新窗口的時候有效)
若是 window.open()
傳遞了第二個參數,且該參數是已有窗口或者框架的名稱,那麼就會在目標窗口加載第一個參數指定的URL
// 若是存在topFrame窗口,則在topFrame窗口打開指定url,不然新建立一個窗口並命名爲topFrame
window.open('htttp://www.maxiaofei.com','topFrame')
==> <a href="http://www.maxiaofei.com" target="topFrame"></a>
複製代碼
window.open()
會返回新窗口的引用,也就是新窗口的 window
對象
var myWin = window.open('http://www.maxiaofei.com','myWin')
複製代碼
window.close()
僅用於經過 window.open()
打開的窗口
新建立的 window
對象有一個 opener
屬性,該屬性指向打開他的原始窗口對象
注:
window.location
和document.location
引用的是同一個對象。location
既是window
對象的屬性,也是document
對象的屬性
以該url舉例:http://www.baidu.com:8080/web/javascript/test.js#12345?a=10&b=20
屬性名 | 例子 | 說明 |
---|---|---|
hash | #12345 | utl中#後面的字符,沒有則返回空串 |
host | www.baidu.com:80 | 服務器名稱和端口號 |
hostname | www.baidu.com | 域名,不帶端口號 |
href | www.baidu.com:8080/web/javascr… | 完整url |
pathname | web/javascript/test.js | 服務器下面的文件路徑 |
port | 8080 | url的端口號,沒有則爲空 |
protocol | http | 使用的協議 |
search | ?a=10&b=20 | url的查詢字符串,一般爲?後面的內容 |
//假設當前URL:'http://www.maxiaofei.com/Web/test.js?name=mafei&age=24&sex=m'
function getQueryObj(){
let location = window.location;
let queryStr = location.search.length > 0 ? location.search.substring(1) : '';
let obj = {},item;
let queryArr = queryStr.length > 0 ? queryStr.split('&') : []
for(let i=0;i<queryArr.length;i++){
item = queryArr[i].split('=');
obj[item[0]] = item[1]
}
return obj
}
getQueryObj()
//=》{
name: 'maxiaofei',
age: 24,
sex: 'm'
}
複製代碼
每次修改 location
的 hash
之外的任何屬性,頁面都會以新URL從新加載
window.location = 'http://www.maxiaofei.com'
location.search = '?name=mafei&age=18'
location.hostname = 'www.baidu.com'
location.pathname = 'web/html/a.html'
location.port = '1234'
複製代碼
除了 hash
值之外的任何修改,都會在瀏覽器的歷史記錄中生成一條新的記錄,能夠經過瀏覽器的回退按鈕導航到前一個頁面,能夠經過 replace()
方法禁止這種行爲,使用 replace
打開的頁面,不能返回到前一個頁面
// 嘗試在瀏覽器控制檯輸入以下代碼,瀏覽器將不支持回退
location.replace('http://www.baidu.com')
複製代碼
經過 location.reload()
方法能夠從新加載頁面
location.reload()
: 從新加載(有可能會從緩存中加載)location.reload(true)
: 從新加載(從服務器從新加載)
navigator
對象主要用來獲取瀏覽器的屬性,區分瀏覽器類型
navigator
對象屬性較多,且兼容性比較複雜,點擊瞭解更多navigator屬性
history
對象保存着用戶上網的歷史記錄,從窗口被打開的那一刻算起,由於history
是window
對象的屬性,所以每一個瀏覽器窗口,每一個標籤乃至每一個框架,都有本身的history
對象與特定的window
對象關聯 -- 《JavaScript高級程序設計》
history 經常使用的有以下3個方法和一個屬性
1. history.go()
history.go('maixaofei.com') //向前或者向後尋找指定字符串頁面,沒有找到則無響應
複製代碼
history.go(3) //向前跳轉三個記錄
history.go(-1) //向後跳轉一個記錄
複製代碼
2. history.forward()
3. history.back()
4. history.length
history.length == 0
,能夠用該屬性來判斷當前打開的網頁是否是該窗口打開的首個網頁本文主要介紹了瀏覽器對象模型(BOM)中幾個經常使用的對象,主要包括 navigator
,window
, location
, history
window.
來調用window.open()
,window.close()
,,分別用來打開和關閉瀏覽器窗口頁面,這裏須要注意的是,經過 open 方法打開的頁面,才能經過close 方法關閉reload()
方法用於手動從新加載頁面,該方法接收一個可選參數,爲 true
的時候表示從服務器從新加載,不然可能從瀏覽器緩存中從新加載頁面location.replace()
,該方法能夠覆蓋當前頁面並從新加載,同時不會在 history 中生成歷史記錄length
屬性獲取記錄數,判斷當前頁面是不是打開的首個頁面