1.全局變量不能通過delete操作符刪除,而直接在window對象上定義的屬性可以。
2.取得窗口相對于屏幕左邊和上邊的位置:
* screenLeft、screenRight(除FF)
* screenX、screenY(FF)
以下代碼可以跨瀏覽器取得窗口左邊和上邊位置(仍存在兼容性問題,建議不要使用)
var leftPos = (typeof window.screenLeft == 'number') ? window.screenLeft : window.screenX;
var topPos = (typeof window.screenTop == 'number') ? window.screenTop : window.screenY;
3.移動\調(diào)整瀏覽器窗體的方法:window.moveTo()、window.moveBy()和window.resizeTo、window.resizeBy同樣不被所有瀏覽器所支持。
4.window對象的innerWidth\innerHeight\outerWidth\outerHeight屬性同樣存在兼容性問題,***通常使用document.documentElement.clientWidth和document.documentElement.clientHeight獲取視口寬高***。
5.window.open()方法接受四個參數(shù):要加載的URL(本域路徑)、窗口目標(相當于a標簽的target屬性)、一個特性字符串以及一個表示新頁面是否取代瀏覽器歷史紀錄中當前加載頁面的布爾值。
如果給window.open()傳遞的第二個參數(shù)并不是一個已經(jīng)存在的窗口或框架,那么該方法就會根據(jù)在第三個參數(shù)位置上傳入的字符串創(chuàng)建一個新窗口或新標簽頁。如果沒有傳入第三個參數(shù),那么就會打開一個帶有全部默認設(shè)置(工具欄、地址欄和狀態(tài)欄等)的新瀏覽器窗口(或者打開一個新標簽頁--根據(jù)瀏覽器設(shè)置)。在不打開新窗口的情況下,會自動忽略第三個參數(shù)。詳見P200表格。
6.window.open()方法返回一個指向新窗口的引用,這個新窗口通常解除了對移動、調(diào)整瀏覽器窗口方法的限制,而且可以使用window.close()方法關(guān)閉它。
7.盡量不要將要執(zhí)行的代碼的字符串表示直接傳入setTimeout()中,以避免可能導致的性能損失**。第二個參數(shù)是一個表示等待多長時間的毫秒數(shù),但經(jīng)過該時間后指定的代碼不一定會執(zhí)行,這個參數(shù)只是告訴JavaScript再過多長時間把當前任務(wù)添加到隊列中。**
**關(guān)于setTimeout的使用有兩個需要注意的地方:一是第一個參數(shù)傳入的字符串相當于調(diào)用了eval()方法。二是這個代碼的運行環(huán)境是全局作用域,因此要注意是否調(diào)用了局部作用域命名的函數(shù)。***
8.***一般認為,使用超時調(diào)用來模擬間歇調(diào)用是一種最佳模式,在開發(fā)環(huán)境下,很少使用真正的間歇調(diào)用,原因是后一個間歇調(diào)用可能會在前一個間歇調(diào)用結(jié)束之前啟動(基于js阻塞等原因)***。
9.瀏覽器通過alert()、confirm()、prompt()方法可以調(diào)用系統(tǒng)對話框向用戶顯示消息。這幾個方法打開的對話框都是同步和模態(tài)的,也就是說,顯示這些對話框的時候代碼會停止執(zhí)行,而關(guān)掉這些對話框后代碼又會恢復執(zhí)行。
10.confirm()的典型用法如下:
~~~
if (confirm('吃飯了嗎?')){
alert('這么早就吃了');
} else {
alert('一起去吃個飯吧');
}
~~~
11.prompt()方法顯示一個文本域,以供用戶在其中輸入內(nèi)容。該方法接收兩個參數(shù):要顯示給用戶的文本提示和文本輸入域的默認值(可以是一個空字符串)。如果用戶點擊了OK,則prompt()反悔文本輸入域的值;如果用戶點擊了cancel或通過其他方式關(guān)閉了對話框,則返回null。
12.window.print()方法打開瀏覽器打印對話框。
13.location對象的用處不止表現(xiàn)在它保存著當前文檔的信息,還表現(xiàn)在它將URL解析為獨立的片段,讓開發(fā)人員可以通過不同的屬性訪問這些片段。location對象的所有屬性見P207。
14.盡管location.search返回從問號到URL末尾的所有內(nèi)容,但卻沒辦法逐個訪問其中的每個查詢字符串參數(shù)。為此,可以像下面這樣創(chuàng)建一個函數(shù),用以解析查詢字符串,然后返回包含所有參數(shù)的一個對象:
function getQueryStringArgs(){
//取得查詢字符串并去掉開頭的問號
var qs = (location.search.length>0 ? location.search.substring(1) : ''),
//保存數(shù)據(jù)的對象
args = {},
//取得每一項
itmes = qs.length ? qs.split('&') : [],
item = null,
name = null,
value = null,
//在for循環(huán)中使用
i = 0,
len = items.length;
//逐個將每一項添加到args對象中
for (i = 0;i<len;i++){
item = items[i].split('=');
name = decodeURIComponent(item[0]);
value = decodeURIComponent(item[1]);
if (name.length) {
args[name] = value;
}
}
return args;
}
15.使用location對象可以通過很多方式來改變?yōu)g覽器當前訪問路徑,如:
location.assign('http://www.baidu.com');
window.location = 'http://www.baidu.com';
***location.href = 'http://www.baidu.com'; (最常用)***
另外,修改location對象的其他屬性也可以改變當前加載的頁面,但通常來修改這些屬性會使頁面以新URL重新加載并產(chǎn)生新的歷史記錄。要禁用這種行為,可以使用***location.replace()***方法。
16.***location.reload()***方法可以重新加載當前頁面,若不傳入?yún)?shù)則有可能從緩存中加載,若傳入true則會強制從服務(wù)器重新加載。
17.navigator對象是目前識別客戶端瀏覽器的事實標準。
18.navigator對象的plugins屬性保存著一個記錄瀏覽器插件信息集合的數(shù)組。關(guān)于插件檢測的更多內(nèi)容見P211。
19.navigator對象的registerContentHandler()和registerProtocolHandler()方法可以讓一個站點指明他可以處理特定類型的信息。隨著RSS閱讀器和在線電子郵件的星期,注冊處理程序就像為使用桌面應(yīng)用程序一樣默認使用這些在線應(yīng)用程序提供了一種方式。詳見P213。
20.history對象常用于創(chuàng)建自定義的‘前進’、‘后退’按鈕,以及檢測當前頁面是不是用戶歷史紀錄中的第一個頁面。
~~~
//前進2頁
history.go(2);
//后退1頁
history.go(-1);
~~~
~~~
if (history.length == 0) {
//這應(yīng)該就是用戶打開窗口的第一個頁面
}
~~~
- 第一章 JavaScript簡介
- 第二章 在HTML中使用JavaScript
- 第三章 基本概念
- 第四章 變量、作用域和內(nèi)存問題
- 第五章 引用類型
- 第六章 面向?qū)ο蟮某绦蛟O(shè)計
- 第七章 函數(shù)表達式
- 第八章 BOM
- 第九章 客戶端檢測
- 第十章 DOM
- 第十一章 DOM擴展
- 第十二章 DOM2和DOM3
- 第十三章 事件
- 第十四章 表單腳本
- 第十六章 HTML5腳本程序
- 第十七章 錯誤處理與調(diào)試
- 第二十章 JSON
- 第二十一章 AJAX和Comet
- 第二十二章 高級技巧
- 第二十三章 離線應(yīng)用與客戶端存儲
- 第二十四章 最佳實踐
- 第二十五章 新興的API
