Window對(duì)象
BOM 的核心對(duì)象是 window,它表示瀏覽器的一個(gè)實(shí)例。在瀏覽器中, window 對(duì)象有雙重角色,
它既是通過 JavaScript 訪問瀏覽器窗口的一個(gè)接口,又是 ECMAScript 規(guī)定的 Global 對(duì)象。這意味著
在網(wǎng)頁(yè)中定義的任何一個(gè)對(duì)象、變量和函數(shù),都以 window 作為其 Global 對(duì)象,因此有權(quán)訪問
parseInt()等方法。
瀏覽器窗口位置
用來確定和修改 window 對(duì)象位置的屬性和方法有很多。 IE、 Safari、 Opera 和 Chrome 都提供了
screenLeft 和 screenTop 屬性,分別用于表示窗口相對(duì)于屏幕左邊和上邊的位置。Firefox 則在
screenX 和 screenY 屬性中提供相同的窗口位置信息, Safari 和 Chrome 也同時(shí)支持這兩個(gè)屬性。使用下列代碼可以跨瀏覽器取得窗口左邊和上邊的位置。
var leftPos = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX;
var topPos = (typeof window.screenTop == "number") ? window.screenTop : window.screenY;
窗口大小
var pageWidth = window.innerWidth,
pageHeight = window.innerHeight;
if (typeof pageWidth != "number"){
if (document.compatMode == "CSS1Compat"){
pageWidth = document.documentElement.clientWidth;
pageHeight = document.documentElement.clientHeight;
} else {
pageWidth = document.body.clientWidth;
pageHeight = document.body.clientHeight;
}
}
location 對(duì)象
location 是最有用的 BOM 對(duì)象之一,它提供了與當(dāng)前窗口中加載的文檔有關(guān)的信息,還提供了一些導(dǎo)航功能。事實(shí)上, location 對(duì)象是很特別的一個(gè)對(duì)象,因?yàn)樗仁?window 對(duì)象的屬性,也是document 對(duì)象的屬性;換句話說, window.location 和 document.location 引用的是同一個(gè)對(duì)象。location 對(duì)象的用處不只表現(xiàn)在它保存著當(dāng)前文檔的信息,還表現(xiàn)在它將 URL 解析為獨(dú)立的片段,讓開發(fā)人員可以通過不同的屬性訪問這些片段。下表列出了location 對(duì)象的所有屬性(注:省略了每個(gè)屬性前面的 location 前綴) 。
| 屬 性 名 | 例子 | 說明 |
|---|---|---|
| hash | "#contents" | 返回URL中的hash(#號(hào)后跟零或多個(gè)字符),如果URL中不包含散列,則返回空字符串 |
| host | "www.wrox.com:80" | 返回服務(wù)器名稱和端口號(hào)(如果有) |
| hostname | "www.wrox.com" | 返回不帶端口號(hào)的服務(wù)器名稱 |
| href | "http:/www.wrox.com" | 返回當(dāng)前加載頁(yè)面的完整URL。而location對(duì)象的toString()方法也返回這個(gè)值 |
| pathname | "/WileyCDA/" | 返回URL中的目錄和(或)文件名 |
| port | "8080" | 返回URL中指定的端口號(hào)。如果URL中不包含端口號(hào),則這個(gè)屬性返回空字符串 |
| protocol | "http:" | 返回頁(yè)面使用的協(xié)議。通常是http:或https: |
| search | "?q=javascript" | 返回URL的查詢字符串。這個(gè)字符串以問號(hào)開頭 |
查詢字符串參數(shù)
雖然通過上面的屬性可以訪問到 location 對(duì)象的大多數(shù)信息,但其中訪問 URL 包含的查詢字符串的屬性并不方便。盡管 location.search 返回從問號(hào)到 URL末尾的所有內(nèi)容,但卻沒有辦法逐個(gè)訪問其中的每個(gè)查詢字符串參數(shù)。為此,可以像下面這樣創(chuàng)建一個(gè)函數(shù),用以解析查詢字符串,然后返回包含所有參數(shù)的一個(gè)對(duì)象:
function getQueryStringArgs(){
//取得查詢字符串并去掉開頭的問號(hào)
var qs = (location.search.length > 0 ? location.search.substring(1) : ""),
//保存數(shù)據(jù)的對(duì)象
args = {},
//取得每一項(xiàng)
items = qs.length ? qs.split("&") : [],
item = null,
name = null,
value = null,
//在 for 循環(huán)中使用
i = 0,
len = items.length;
//逐個(gè)將每一項(xiàng)添加到 args 對(duì)象中
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;
}
位置操作
location.assign("http://www.wrox.com");
立即打開新 URL 并在瀏覽器的歷史記錄中生成一條記錄。如果是將 location.href或 window.location 設(shè)置為一個(gè) URL 值,也會(huì)以該值調(diào)用 assign()方法。
在這些改變?yōu)g覽器位置的方法中,最常用的是設(shè)置 location.href 屬性。
另外,修改location 對(duì)象的其他屬性也可以改變當(dāng)前加載的頁(yè)面。下面的例子展示了通過將hash、search、 hostname、 pathname 和 port 屬性設(shè)置為新值來改變 URL。
//假設(shè)初始 URL 為 http://www.wrox.com/WileyCDA/
//將 URL 修改為"http://www.wrox.com/WileyCDA/#section1"
location.hash = "#section1";
//將 URL 修改為"http://www.wrox.com/WileyCDA/?q=javascript"
location.search = "?q=javascript";
//將 URL 修改為"http://www.yahoo.com/WileyCDA/"
location.hostname = "www.yahoo.com";
//將 URL 修改為"http://www.yahoo.com/mydir/"
location.pathname = "mydir";
//將 URL 修改為"http://www.yahoo.com:8080/WileyCDA/"
location.port = 8080;
每次修改 location 的屬性(hash 除外),頁(yè)面都會(huì)以新 URL 重新加載。
當(dāng)通過上述任何一種方式修改 URL 之后,瀏覽器的歷史記錄中就會(huì)生成一條新記錄,因此用戶通過單擊“后退”按鈕都會(huì)導(dǎo)航到前一個(gè)頁(yè)面。要禁用這種行為,可以使用 replace()方法。這個(gè)方法只接受一個(gè)參數(shù),即要導(dǎo)航到的URL;結(jié)果雖然會(huì)導(dǎo)致瀏覽器位置改變,但不會(huì)在歷史記錄中生成新記錄。
location.reload();
重新加載頁(yè)面
navigator 對(duì)象
| 屬性或方法 | 說明 | IE | Firefox | Safari/Chrome | Opera |
|---|---|---|---|---|---|
| appCodeName | 瀏覽器的名稱。通常都是Mozilla,即使在非Mozilla瀏覽器中也是如此 | 3.0+ | 1.0+ | 1.0+ | 7.0+ |
| appMinorVersion | 次版本信息 | 4.0+ | - | - | 9.5+ |
| appName | 完整的瀏覽器名稱 | 3.0+ | 1.0+ | 1.0+ | 7.0+ |
| appVersion | 瀏覽器的版本。一般不與實(shí)際的瀏覽器版本對(duì)應(yīng) | 3.0+ | 1.0+ | 1.0+ | 7.0+ |
| buildID | 瀏覽器編譯版本 | - | 2.0+ | - | - |
| cookieEnabled | 表示cookie是否啟用 | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
| cpuClass | 客戶端計(jì)算機(jī)中使用的CPU類型(x86、68K、 Alpha、 PPC或Other) | 4.0+ | - | - | - |
| javaEnabled() | 表示當(dāng)前瀏覽器中是否啟用了Java | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
| language | 瀏覽器的主語(yǔ)言 | - | 1.0+ | 1.0+ | 7.0+ |
| mimeTypes | 在瀏覽器中注冊(cè)的MIME類型數(shù)組 | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
| onLine | 表示瀏覽器是否連接到了因特網(wǎng) | 4.0+ | 1.0+ | - | 9.5+ |
| opsProfile | 似乎早就不用了。查不到相關(guān)文檔 | 4.0+ | - | - | - |
| oscpu | 客戶端計(jì)算機(jī)的操作系統(tǒng)或使用的CPU | - | 1.0+ | - | - |
| platform | 瀏覽器所在的系統(tǒng)平臺(tái) | 4.0+ | 1.0+ | .0+ | 7.0+ |
| plugins | 瀏覽器中安裝的插件信息的數(shù)組 | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
| preference() | 設(shè)置用戶的首選項(xiàng) | - | 1.5+ | - | - |
| product | 產(chǎn)品名稱(如 Gecko) | - | 1.0+ | 1.0+ | - |
| productSub | 關(guān)于產(chǎn)品的次要信息(如Gecko的版本) | - | 1.0+ | 1.0+ | - |
| register-ContentHandler() | 針對(duì)特定的MIME類型將一個(gè)站點(diǎn)注冊(cè)為處理程序 | - | 2.0+ | - | - |
| register-ProtocolHandler() | 針對(duì)特定的協(xié)議將一個(gè)站點(diǎn)注冊(cè)為處理程序 | - | 2.0 | - | - |