瀏覽器對象模型BOM(Browser Object Model)
1、結構
- BOM是Browser Object Model的縮寫,簡稱瀏覽器對象模型
- BOM提供了獨立於內容而與瀏覽器窗口進行交互的對象
- 由於BOM主要用於管理窗口與窗口之間的通訊,因此其核心對象是window
- BOM由一系列相關的對象構成,並且每個對象都提供了很多方法與屬性
- BOM缺乏標准,JavaScript語法的標准化組織是ECMA,DOM的標准化組織是W3C(WHATWG,WebHypertextApplicationTechnologyWorkingGroup——網頁超文本應用程序技術工作組目前正在努力促進BOM的標准化)
- BOM最初是Netscape瀏覽器標准的一部分
結構圖如下:
2、BOM的作用
BOM提供了一些訪問窗口對象的一些方法,我們可以用它來移動窗口位置,改變窗口大小,打開新窗口和關閉窗口,彈出對話框,進行導航以及獲取客戶的一些信息如:瀏覽器品牌版本,屏幕分辨率。但BOM最強大的功能是它提供了一個訪問HTML頁面的一入口——document對象,以使得我們可以通過這個入口來使用DOM的強大功能!!!
window對象是BOM的頂層(核心)對象,所有對象都是通過它延伸出來的,也可以稱為window的子對象。由於window是頂層對象,因此調用它的子對象時可以不顯示的指明window對象,例如下面兩行代碼是一樣的:

window -- window對象是BOM中所有對象的核心。window對象表示整個瀏覽器窗口,但不必表示其中包含的內容。此外,window還可用於移動或調整它表示的瀏覽器的大小,或者對它產生其他影響。
JavaScript中的任何一個全局函數或變量都是window的屬性。
3、window子對象
- document 對象
- frames 對象
- history 對象
- location 對象
- navigator 對象
- screen 對象
4、window對象關系屬性
- parent:如果當前窗口為frame,指向包含該frame的窗口的frame (frame)
- self :指向當前的window對象,與window同意。 (window對象)
- top :如果當前窗口為frame,指向包含該frame的top-level的window對象
- window :指向當前的window對象,與self同意。
- opener :當窗口是用javascript打開時,指向打開它的那人窗口(開啟者)
5、window對象定位屬性
- IE提供了window.screenLeft和window.screenTop對象來判斷窗口的位置,但未提供任何判斷窗口大小的方法。用document.body.offsetWidth和document.body. offsetHeight屬性可以獲取視口的大小(顯示HTML頁的區域),但它們不是標准屬性。
- Mozilla提供window.screenX和window.screenY屬性判斷窗口的位置。它還提供了window.innerWidth和window.innerHeight屬性來判斷視口的大小,window.outerWidth和window.outerHeight屬性判斷瀏覽器窗口自身的大小。
6、window對象的方法
方法 | 描述 |
alert() | 彈出一個帶有一段消息和確認按鈕的窗體 |
blur() | 把鍵盤焦點從頂層窗口移開 |
clearInterval() | 取消由setInterval()設置的timeout |
clearTimeout() | 取消有setTimeout()方法設置的timeout |
close() | 關閉瀏覽器窗口 |
confirm() | 顯示帶有一段消息以及確認按鈕盒取消按鈕的對話框 |
focus() | 把鍵盤焦點給予一個窗口 |
moveBy() | 可相對窗口的當前坐標移動指定的像素 |
moveTo() | 把窗口的左上角移動到一個指定的坐標 |
open() | 打開一個新的瀏覽器窗體 |
prompt() | 顯示可提示用戶輸入的對話框 |
resizeBy() | 按照指定的像素調整窗口的大小 |
resizeTo() | 把窗體的大小調整到指定的寬度和高度 |
scrollBy() | 按照指定的像素值來滾動內容 |
scrollTo() | 把內容滾動到指定的坐標 |
setInterval() | 按照指定的周期(毫秒)來調用函數或計算表達式 |
setTimeout() | 在指定的毫秒數后調用函數或表達式 |

窗體控制
moveBy(x,y)——從當前位置水平移動窗體x個像素,垂直移動窗體y個像素,x為負數,將向左移動窗體,y為負數,將向上移動窗體
moveTo(x,y)——移動窗體左上角到相對於屏幕左上角的(x,y)點,當使用負數做為參數時會吧窗體移出屏幕的可視區域
resizeBy(w,h)——相對窗體當前的大小,寬度調整w個像素,高度調整h個像素。如果參數為負值,將縮小窗體,反之擴大窗體
resizeTo(w,h)——把窗體寬度調整為w個像素,高度調整為h個像素
窗體滾動軸控制
scrollTo(x,y)——在窗體中如果有滾動條,將橫向滾動條移動到相對於窗體寬度為x個像素的位置,將縱向滾動條移動到相對於窗體高度為y個像素的位置
scrollBy(x,y)—— 如果有滾動條,將橫向滾動條移動到相對於當前橫向滾動條的x個像素的位置(就是向左移動x像素),將縱向滾動條移動到相對於當前縱向滾動條高度為y個像素的位置(就是向下移動y像素)
窗體焦點控制
focus()—— 使窗體或控件獲取焦點
blur()——與focus函數相反,使窗體或控件失去焦點
新建窗體
open()——打開(彈出)一個新的窗體
close()——關閉窗體
opener屬性——新建窗體中對父窗體的引用,中文"開啟者"的意思
window.open方法語法
window.open(url, name, features, replace);
open方法參數說明
- url -- 要載入窗體的URL
- name -- 新建窗體的名稱(目標,將在a 標簽的target屬性中用到,當與已有窗體名稱相同時將覆蓋窗體內容).open函數默認的打開窗體的方式為target的_blank彈出方式,因此頁面都將以彈出的方式打開
- features -- 代表窗體特性的字符串,字符串中每個特性使用逗號分隔
- replace -- 一個布爾值,說明新載入的頁面是否替換當前載入的頁面,此參數通常不用指定
open函數features參數說明,如果不使用第三個參數,將打開一個新的普通窗口
參數名稱 |
類型 |
說明 |
height |
Number |
設置窗體的高度,不能小於100 |
left |
Number |
說明創建窗體的左坐標,不能為負值 |
location |
Boolean |
窗體是否顯示地址欄,默認值為no |
resizable |
Boolean |
窗體是否允許通過拖動邊線調整大小,默認值為no |
scrollbars |
Boolean |
窗體中內部超出窗口可視范圍時是否允許拖動,默認值為no |
toolbar |
Boolean |
窗體是否顯示工具欄,默認值為no |
top |
Number |
說明創建窗體的上坐標,不能為負值 |
status |
Boolean |
窗體是否顯示狀態欄,默認值為no |
width |
Number |
創建窗體的寬度,不能小於100 |
特性字符串中的每個特性使用逗號分隔,每個特性之間不允許有空格
open方法返回值為一個新窗體的window對象的引用
對話框
alert(str)—— 彈出消息對話框(對話框中有一個“確定”按鈕)
confirm(str)—— 彈出消息對話框(對話框中包含一個“確定”按鈕與“取消”按鈕)
prompt(str,defaultValue)——彈出消息對話框(對話框中包含一個“確定”按鈕、“取消”按鈕與一個文本輸入框),由於各個瀏覽器實現的不同,若沒有第二個參數(文本框中的默認值)時也最好提供一個空字符串
狀態欄
window.defaultStatus 屬性——改變瀏覽器狀態欄的默認顯示(當狀態欄沒有其它顯示時),瀏覽器底部的區域稱為狀態欄,用於向用戶顯示信息
window.status 屬性——臨時改變瀏覽器狀態欄的顯示
時間等待與間隔函數
setTimeout()—— 暫停指定的毫秒數后執行指定的代碼
clearTimeout()——取消指定的setTimeout函數將要執行的代碼
setInterval()——間隔指定的毫秒數不停地執行指定的代碼
clearInterval()——取消指定的setInterval函數將要執行的代碼
setTimeout與setInterval方法有兩個參數,第一個參數可以為字符串形式的代碼,也可以是函數引用,第二個參數為間隔毫秒數,它們的返回是一個可用於對應clear方法的數字ID

7、History對象,在瀏覽器歷史記錄中導航
History 對象的屬性:length 返回瀏覽器歷史列表中的 URL 數量
History 對象的方法
- back() 加載 history 列表中的前一個 URL
- forward() 加載 history 列表中的下一個 URL
- go(num) 加載 history 列表中的某個具體頁面
8、Location 對象
Location 對象的屬性
- hash 設置或返回從井號 (#) 開始的 URL(錨)
- host 設置或返回主機名和當前 URL 的端口號
- hostname 設置或返回當前 URL 的主機名
- href 設置或返回完整的 URL
- pathname 設置或返回當前 URL 的路徑部分
- port 設置或返回當前 URL 的端口號
- protocol 設置或返回當前 URL 的協議
- search 設置或返回從問號 (?) 開始的 URL(查詢部分)
Location 對象的方法
- assign() 加載新的文檔,這與直接將一個URL賦值給Location對象的href屬性效果是一樣的
- reload() 重新加載當前文檔,如果該方法沒有規定參數,或者參數是 false,它就會用 HTTP 頭 If-Modified-Since 來檢測服務器上的文檔是否已改變。如果文檔已改變,reload() 會再次下載該文檔。如果文檔未改變,則該方法將從緩存中裝載文檔。這與用戶單擊瀏覽器的刷新按鈕的效果是完全一樣的。如果把該方法的參數設置為 true,那么無論文檔的最后修改日期是什么,它都會繞過緩存,從服務器上重新下載該文檔。這與用戶在單擊瀏覽器的刷新按鈕時按住 Shift 健的效果是完全一樣。
- replace() 用新的文檔替換當前文檔,replace() 方法不會在 History 對象中生成一個新的紀錄。當使用該方法時,新的 URL 將覆蓋 History 對象中的當前紀錄。
9、Navigator對象
Navigator 對象的屬性
- appCodeName 返回瀏覽器的代碼名
- appName 返回瀏覽器的名稱
- appVersion 返回瀏覽器的平台和版本信息
- browserLanguage 返回當前瀏覽器的語言
- cookieEnabled 返回指明瀏覽器中是否啟用 cookie 的布爾值
- cpuClass 返回瀏覽器系統的 CPU 等級
- onLine 返回指明系統是否處於脫機模式的布爾值
- platform 返回運行瀏覽器的操作系統平台
- systemLanguage 返回 OS 使用的默認語言
- userAgent 返回由客戶機發送服務器的 user-agent 頭部的值
- userLanguage 返回 OS 的自然語言設置
10、screen對象
javascript可以獲取某些關於用戶屏幕的信息
屬性 | 描述 |
availHeight | 返回顯示屏幕的高度(除window任務欄) |
availWidth | 返回顯示屏幕的寬度(除window任務欄) |
deviceXDPI | 返回顯示屏幕的每英寸水平點數 |
deviceXDPI | 返回顯示屏幕的每英寸垂直點數 |
fontSmoothingEnabled | 返回用戶是否在顯示控制面板中開啟了字體平滑 |
height | 返回顯示屏幕的高度 |
logicalXDPI | 返回顯示屏幕每英寸的水平方向的常規點數 |
logicalYDPI | 返回顯示屏幕每英寸的垂直方向的常規點數 |
pixelDepth | 返回 顯示屏幕的顏色分辨率(比特每像素) |
updateInterval | 設置或返回屏幕的刷新率 |
width | 返回顯示器屏幕的寬度 |
每個window對象的screen屬性都引用screen對象。該對象存放着有關顯示器屏幕相關的信息,我們可以根據這些信息來優化頁面的輸入等等。
11、框架與多窗口通信
子窗口與父窗口
只有自身和使用window.open方法打開的窗口和才能被JavaScript訪問,window.open方法打開的窗口通過window.opener屬性來訪問父窗口。 而在opener窗口中,可以通過window.open方法的返回值來訪問打開的窗口!
框架
window.frames集合:在框架集或包含iframe標簽的頁面中,frames集合包含了對有框架中窗口的引用

在框架集中還可以使用ID來獲取子窗口的引用
原文參考與:https://www.cnblogs.com/dreamfly-yhl/p/3179905.html

子窗口訪問父窗口——window對象的parent屬性
子窗口訪問頂層——window對象的top屬性