《JavaScript高級程序設計》讀書筆記(九)

第8章 BOM

BOM(瀏覽器對象模型)提供了很多對象,用於訪問瀏覽器的功能,這些功能和任何網頁內容無關。

8.1window對象

BOM的核心對象是window,它表示瀏覽器的一個實例。window對象是通過JavaScript訪問瀏覽器窗口的一個接口,又是ECMAScript規定的Global對象。

8.1.1全局作用域

所有在全局作用域中聲明的變量、函數都會變成window對象的屬性和方法。

定義全局變量與在window對象上直接定義屬性還是有一點差別全局變量不能通過delete操作符刪除([[Configurable]]特性設置爲false),而直接在window對象上定義的屬性可以

嘗試訪問未聲明的變量會拋出錯誤,但是通過查詢window對象,可以知道某個可能未聲明的變量是否存在。

8.1.2窗口關係及框架

如果頁面包含框架,則每個框架都擁有自己的window對象,並且保存在frames集合中。每個window對象都有一個name屬性,其中包含框架的名稱。

top對象始終指向最高(最外)層的框架,也就是瀏覽器窗口。與top相對的另一個window對象是parent。parent對象始終指向當前框架的直接上層框架。

除非最高層窗口是通過window.open()打開的,否則window對象的name屬性不會包含任何值。
與框架有關的最後一個對象是self,它始終指向window;實際上,self和window對象可以互換使用。

所有這些對象都是window對象的屬性,可以通過window.parent、window.top等形式來訪問。

8.1.3窗口位置

IE、Safiri、Opera和Chrome都提供了screenLeftscreenTop屬性,分別表示窗口相對於屏幕左邊和上邊的位置。Firefox則在screenXscreenY屬性中提供了相同的窗口信息,Safari和Chrome也同時支持這兩個屬性。Opera雖然也支持screenXscreenY屬性,但和screenLeftscreenTop屬性並不對應。

var leftPos = (typeof window.screenLeft == 'number') ?
						window.screenLeft : window.screenX;
var topPos = (typeof window.screenTop == 'number') ?
						window.screenTop : window.screenY;

使用moveTo()moveBy()可以將窗口精確地移動到一個新位置。這兩個方法都接收兩個參數,moveTo()接收的是新位置的x和y座標值,而moveBy()接收的是在水平垂直方向上移動的像素值。

8.1.4窗口大小

IE9+、Firefox、Safari、Opera和Chrome均爲此提供了4個屬性:innerWidthinnerHeightouterWidthouterHeight,但都有一些差別。

使用resizeTo()resizeBy()方法可以調整瀏覽器窗口的大小。這兩個方法都接收兩個參數,resizeTo()接收瀏覽器窗口的新寬度和新高度,而resizeBy()接收新窗口與原窗口的寬度和高度之差。

8.1.5導航和打開窗口

使用window.open()方法既可以導航到一個特定URL,也可以打開一個新的瀏覽器窗口。這個方法接收4個參數:要加載的URL、窗口目標、一個特性字符串(具體特性見書P200)以及一個表示新頁面是否取代瀏覽器歷史記錄中當前加載頁面的布爾值。通常是須傳遞一個參數,最後一個參數只在不打開新窗口的情況下使用。

window.open()會返回一個指向新窗口的引用,使用close()方法可以關閉新打開的窗口。

新創建的window對象有一個opener屬性,保存着打開它的原始窗口對象。

8.1.6間歇調用和超時調用

JavaScript是單線程語言,但它允許通過設置超時值和間歇時間值來調度代碼在特定時刻執行。前者是在指定的時間過後執行代碼,後者是每隔指定的時間就執行一次代碼。

超時調用使用window對象的setTimeout()方法,它接收兩個參數:要執行的代碼(可以是字符串,也可以是函數,傳遞字符串可能導致性能損失)和以毫秒錶示的時間。
取消尚未執行的超時調用計劃可以調用clearTimeout()方法,並將相應的超時調用ID作爲參數傳遞給它。

設置間歇調用的方法是setInterval(),它接收的參數和setTimeout()相同,取消尚未執行的間歇調用,可以使用clearInterval()方法。

一般認爲,使用超時調用來模擬間歇調用是一種最佳模式。

8.1.7系統對話框

瀏覽器通過alert()confirm()prompt()方法可以調用系統對話框向用戶顯示消息。

8.2location對象

location是最有用的BOM對象之一,它提供了與當前窗口中加載的文檔有關的信息,還提供了一些導航功能。location對象既是window對象的屬性,也是document對象的屬性;換句話說,window.location和document.location引用的是同一個對象。

location對象的屬性:hash、host、hostname、href、pathname、port、protocol和search。
改變瀏覽器的位置:location.assign()window.locationlocation.href(常用)以上修改URL後,瀏覽器的歷史記錄會生成一條新紀錄,可以使用replace()方法禁止用戶回到前一個頁面。

最後reload()方法作用是重新加載當前顯示的頁面。如果頁面自上次請求以來並沒有改變,頁面就會以最有效的方式重新加載。如果要強制從服務器重新加載,則需要傳遞參數true

8.3navigator對象

navigator對象的屬性(見書P210)通常用於檢測顯示頁面的瀏覽器類型,檢測插件用plugins數組等。

8.4screen對象

screen對象基本上只用來表示客戶端的能力,其中包活瀏覽器窗口外部的顯示器的信息。

8.5history對象

history對象保存着用戶上網的歷史記錄,從窗口被打開的那一刻算起。

使用go()方法可以在用戶的歷史記錄中任意跳轉,這個方法接收一個參數,表示向後或向前跳轉的頁面數的一個整數值。也可以傳遞一個字符串參數,此時瀏覽器會跳轉到歷史記錄中包含該字符串的第一個位置,具體看那個位置近。

還有兩個簡寫的back()forward()方法來代替go()

history對象還有一個length屬性,用來保存歷史記錄的數量。

發佈了110 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章