JavaScript高級程序設計(第3版)第八章讀書筆記

第八章 BOM

1. BOM的核心對象是window,它表示瀏覽器的一個實例。在瀏覽器中,window對象由雙重較色,它既是通過JavaScript訪問瀏覽器窗口的一個接口,又是ECMAScript規定的Global對象。這意味着在網頁中定義的任何一個對象、變量和函數,都以window作爲其Global對象,因此有權訪問parseInt( )等方法。

2. 由於window對象同時扮演者ECMAScript中的Global對象的角色,因此所有在全局作用域中聲明的變量、函數都會成爲window對象的屬性和方法。

3. 定義全局變量與在window對象上直接定義屬性的差別:全局變量不能通過delete操作符刪除,而直接在window對象上的定義的屬性更可以刪除。嘗試訪問未聲明的變量會拋出錯誤,但是通過查詢window對象,可以知道某個可能未聲明的變量是否存在。

4. 如果頁面中包含框架,則每個框架都擁有自己的window對象,並且保存在frames集合中。每個window對象都有一個name屬性,其中包含框架的名稱。top對象始終指向最高(最外)層的框架,也就是瀏覽器窗口。與top相對的另一個window對象是parent。parent(父)對象始終指向當前框架的直接上層框架,在沒有框架的情況下,parent一定等於top,此時它們都等於window。

5. IE、Safari、Opera和Chrome都提供了screenLeft和screenTop屬性,分別用於表示窗口相對於屏幕左邊和上邊的位置。Firefox則在screenX和screenY屬性中提供相同的窗口位置信息,Safari和Chrome也同時支持這兩個屬性,但Opera中這兩個屬性與screenLeft和screenTop屬性並不對應,因此,跨瀏覽器去的窗口左邊和上邊的位置代碼如下:

var leftPos = (typeof window.screenLeft =="number")?window.screenLeft:window.screenX;
var topPos = (typeof window.screenTop == "number")?window.screenTop:window.screenY;
    注意:無法在瀏覽器的條件下去的窗口左邊和上邊的精確座標值。

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

    注意:這兩個方法可能會被瀏覽器禁用,而且在Opera和IE7及更高版本中默認就是禁用的。另外,這兩個方法都不適用於框架,只能對最外層的window對象使用。

7. 頁面視口,即瀏覽器縮放時的真實大小。雖然最終無法確定瀏覽器窗口本身的大小,但卻可以取得頁面視口的大小:

var pageWidth = window.innerWidth, pageHeight = window.innerHeight;
if(typeof pageWidth != "number"){
	if(document.compatMode == "CSS1Compat"){
		pageWidth = document.documentElement.clientWiidh;
		pageHeight = document.documentElement.clientHeigth;
	}else{
		pageWidth = document.body.clientWiidh;
		pageHeight = document.body.clientHeigth;
	}
}


8. 移動開發,閱讀http://t.cn/zOZs0Tz.

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

10. 間歇調用和超時調用

      超時調用需要使用window對象的setTimeout( )方法,接受兩個參數,要執行的代碼和以毫秒錶示的時間。推薦第一個參數用該函數表示,不要傳遞字符串,因爲可能會導致性能損失。經過指定的時間後,代碼不一定會執行。因爲JavaScript是一個單線程序的解釋器,一定時間只能執行一段代碼,需要在之前代碼執行完畢,隊列爲空時才能執行。該方法在調用之後,會返回一個數值ID,表示超時調用。這個超時調用ID是計劃執行代碼的唯一標識,可以通過它來取消超時調用。只要在指定的時間尚未過去之前調用clearTimeout( ),就可以完全取消超時調用。

       間歇調用會按照指定的時間間隔重複執行代碼,直至間歇調用被取消或者頁面被卸載。傳遞參數,與用法同setTimeout( )。也會返回一個間歇調用ID,該ID用來取消。也可使用clearInterval( )方法並傳入相應的間歇調用ID。取消間歇調用的重要性遠高於取消超時調用。可使用超時調用來模擬接卸調用。

11. 瀏覽器通過alert( )、confirm( )和prompt( )方法可以調用系統該對話框向用戶顯示消息。它們的而外觀由操作系統及瀏覽器設置決定,而不是由CSS決定。

      調用alert()方法的結果就是向用戶顯示一個系統對話框,其中更包含指定的文本和一個“ok/確定”按鈕。

      調用confirm( ),點擊了OK返回true,點擊了cancel或右上角的x按鈕,返回false。

      prompt( )方法接收兩個參數:要顯示給用戶的文本提示和文本輸入域的默認值(可以是一個空字符串)。用戶單擊ok按鈕,則prompt( )返回文本輸入域的值,如果單擊了Cancel或沒有單擊OK而是通過其他方式關閉了對話框,則該方法返回null。

12. location對象也是BOM對象,提供了與當前窗口中加載的文檔有關的信息,還提供一些導航功能。事實上,location對象是一個特殊的對象,因爲它既是window對象的屬性,也是document對象的屬性,即window.location和document.location引用的是同一個對象。location對象不僅保存着當前文檔的信息,還將URL解析爲獨立的片段。

13. 使用location對象改變瀏覽器位置的多種方式:  

location.assign("http://www.wrox.com");
window.location="htttp://www.wrox.com";
location.href="htttp://www.wrox.com";
   還可以修改location對象的其他屬性來改變當前加載的頁面,任何一種方式修改URL之後,頁面都會以新URL重新加載,瀏覽器的歷史記錄就會生成一條新記錄。調用replace( )方法,將禁用此種行爲,用戶回不到前一個頁面。

  reload( )方法的作用格式重新加載當前顯示的頁面。如果沒有傳遞參數,頁面就會以最有效的方式重新加載,一般會從瀏覽器緩存中重新加載,如果要強制從服務器重新加載,則需要向該方法傳遞參數true。

14. navigator對象是識別客戶端瀏覽器的事實標準,其屬性通常用於檢測顯示網頁的瀏覽器類型。

15. screen對象用來表明客戶端的能力,其中包括瀏覽器窗口外部的顯示器的信息 ,如像素高度和寬度等。每個瀏覽器中的screen對象都包含着不同過的屬性,支持也不同。

16. history對象保存着用戶上網的歷史記錄,從窗口被打開的那一刻算起。因爲history是window對象的屬性,因此每個瀏覽器窗口、每個標籤乃至每個框架,都有自己的history對象與特定的window對象關聯。

      使用go( )方法可以在用戶的歷史記錄中任意調整,可以向前也可以向後,參數用正負數表示,也可以傳遞一個字符串參數,跳轉到最近的頁面。還有back( )和forward( )代替go( )。

    

    

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