Window對象
BOM 的核心對象是 window乒裆,它表示瀏覽器的一個實例鹤耍。在瀏覽器中验辞, window 對象有雙重角色受神,
它既是通過 JavaScript 訪問瀏覽器窗口的一個接口,又是 ECMAScript 規(guī)定的 Global 對象财著。這意味著
在網頁中定義的任何一個對象撑碴、變量和函數(shù),都以 window 作為其 Global 對象伟姐,因此有權訪問
parseInt()等方法亿卤。
瀏覽器窗口位置
用來確定和修改 window 對象位置的屬性和方法有很多排吴。 IE、 Safari屹堰、 Opera 和 Chrome 都提供了
screenLeft
和 screenTop
屬性街氢,分別用于表示窗口相對于屏幕左邊和上邊的位置。Firefox 則在
screenX 和 screenY 屬性中提供相同的窗口位置信息荣刑, Safari 和 Chrome 也同時支持這兩個屬性。使用下列代碼可以跨瀏覽器取得窗口左邊和上邊的位置延蟹。
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 對象
location 是最有用的 BOM 對象之一阱飘,它提供了與當前窗口中加載的文檔有關的信息虱颗,還提供了一些導航功能忘渔。事實上, location 對象是很特別的一個對象散址,因為它既是 window 對象的屬性宣赔,也是document 對象的屬性;換句話說吏祸, window.location 和 document.location 引用的是同一個對象钩蚊。location 對象的用處不只表現(xiàn)在它保存著當前文檔的信息砰逻,還表現(xiàn)在它將 URL 解析為獨立的片段,讓開發(fā)人員可以通過不同的屬性訪問這些片段丐巫。下表列出了location 對象的所有屬性(注:省略了每個屬性前面的 location 前綴) 勺美。
屬 性 名 | 例子 | 說明 |
---|---|---|
hash | "#contents" | 返回URL中的hash(#號后跟零或多個字符)赡茸,如果URL中不包含散列祝闻,則返回空字符串 |
host | "www.wrox.com:80" | 返回服務器名稱和端口號(如果有) |
hostname | "www.wrox.com" | 返回不帶端口號的服務器名稱 |
href | "http:/www.wrox.com" | 返回當前加載頁面的完整URL。而location對象的toString()方法也返回這個值 |
pathname | "/WileyCDA/" | 返回URL中的目錄和(或)文件名 |
port | "8080" | 返回URL中指定的端口號辙纬。如果URL中不包含端口號叭喜,則這個屬性返回空字符串 |
protocol | "http:" | 返回頁面使用的協(xié)議捂蕴。通常是http:或https: |
search | "?q=javascript" | 返回URL的查詢字符串。這個字符串以問號開頭 |
查詢字符串參數(shù)
雖然通過上面的屬性可以訪問到 location 對象的大多數(shù)信息涡匀,但其中訪問 URL 包含的查詢字符串的屬性并不方便溉知。盡管 location.search 返回從問號到 URL末尾的所有內容级乍,但卻沒有辦法逐個訪問其中的每個查詢字符串參數(shù)。為此蒿囤,可以像下面這樣創(chuàng)建一個函數(shù)崇决,用以解析查詢字符串恒傻,然后返回包含所有參數(shù)的一個對象:
function getQueryStringArgs(){
//取得查詢字符串并去掉開頭的問號
var qs = (location.search.length > 0 ? location.search.substring(1) : ""),
//保存數(shù)據(jù)的對象
args = {},
//取得每一項
items = 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;
}
位置操作
location.assign("http://www.wrox.com");
立即打開新 URL 并在瀏覽器的歷史記錄中生成一條記錄。如果是將 location.href
或 window.location
設置為一個 URL 值盈厘,也會以該值調用 assign()
方法沸手。
在這些改變?yōu)g覽器位置的方法中,最常用的是設置 location.href 屬性跳仿。
另外捐晶,修改location 對象的其他屬性也可以改變當前加載的頁面。下面的例子展示了通過將hash山上、search佩憾、 hostname、 pathname 和 port 屬性設置為新值來改變 URL澈吨。
//假設初始 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 除外)谅辣,頁面都會以新 URL 重新加載婶恼。
當通過上述任何一種方式修改 URL 之后,瀏覽器的歷史記錄中就會生成一條新記錄蚣录,因此用戶通過單擊“后退”按鈕都會導航到前一個頁面萎河。要禁用這種行為蕉饼,可以使用 replace()
方法。這個方法只接受一個參數(shù)擎椰,即要導航到的URL创肥;結果雖然會導致瀏覽器位置改變叹侄,但不會在歷史記錄中生成新記錄。
location.reload();
重新加載頁面
navigator 對象
屬性或方法 | 說明 | 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 | 瀏覽器的版本尿褪。一般不與實際的瀏覽器版本對應 | 3.0+ | 1.0+ | 1.0+ | 7.0+ |
buildID | 瀏覽器編譯版本 | - | 2.0+ | - | - |
cookieEnabled | 表示cookie是否啟用 | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
cpuClass | 客戶端計算機中使用的CPU類型(x86杖玲、68K、 Alpha摆马、 PPC或Other) | 4.0+ | - | - | - |
javaEnabled() | 表示當前瀏覽器中是否啟用了Java | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
language | 瀏覽器的主語言 | - | 1.0+ | 1.0+ | 7.0+ |
mimeTypes | 在瀏覽器中注冊的MIME類型數(shù)組 | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
onLine | 表示瀏覽器是否連接到了因特網 | 4.0+ | 1.0+ | - | 9.5+ |
opsProfile | 似乎早就不用了臼闻。查不到相關文檔 | 4.0+ | - | - | - |
oscpu | 客戶端計算機的操作系統(tǒng)或使用的CPU | - | 1.0+ | - | - |
platform | 瀏覽器所在的系統(tǒng)平臺 | 4.0+ | 1.0+ | .0+ | 7.0+ |
plugins | 瀏覽器中安裝的插件信息的數(shù)組 | 4.0+ | 1.0+ | 1.0+ | 7.0+ |
preference() | 設置用戶的首選項 | - | 1.5+ | - | - |
product | 產品名稱(如 Gecko) | - | 1.0+ | 1.0+ | - |
productSub | 關于產品的次要信息(如Gecko的版本) | - | 1.0+ | 1.0+ | - |
register-ContentHandler() | 針對特定的MIME類型將一個站點注冊為處理程序 | - | 2.0+ | - | - |
register-ProtocolHandler() | 針對特定的協(xié)議將一個站點注冊為處理程序 | - | 2.0 | - | - |