js BOM對(duì)象

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 都提供了
screenLeftscreenTop 屬性,分別用于表示窗口相對(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.hrefwindow.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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容