Window對象的location屬性引用的是Location對象,它表示該窗口中當前顯示的文檔的URL,並定義了方法來使窗口載入新的文檔。Document對象的location屬性也引用到Location對象:window.location === document.location 返回true
Document對象也有一個URL屬性,是文檔首次載入后保存該文檔的URL的靜態字符串。如果定位到文檔中的片段標識符(如#table-of-c ontents),Location對象會做相應的更新,而document.URL屬性卻不會改變。
Window對象的location屬性引用的是Location對象,它表示該窗口中當前顯示的文檔的URL。Location對象的href屬性是一個字符串,后者包含URL的完整文本。Location對象的toString()方法返回href屬性的值,因此在會隱式調用toString()的情況下,可以使
用location代替location.href。這個對象的其他屬性-protocol,host,hostname,port,pathname和search,分別表示URL的各個部分。它們稱為“URL分解”屬性,同時被Link對象(通過HTML文檔中的<a>和<area>元素創建)支持。
- location.hostname 返回 web 主機的域名
- location.pathname 返回當前頁面的路徑和文件名
- location.port 返回 web 主機的端口 (80 或 443)
- location.protocol 返回所使用的 web 協議(http:// 或 https://)
- location.href 屬性返回當前頁面的 URL。
- location.assign() 方法加載新的文檔。
Location對象的hash和search屬性比較有趣。如果有的話,hash屬性返回URL中的“片段標識符”部分。search屬性也類似,它返回的是問號之后的URL,這部分通常是某種類型的查詢字符串。一般來說,這部分內容是用來參數化URL並在其中嵌入參數的。
雖然這些參數通常用於運行在服務器上的腳本,但在啟用JavaScript的頁面中當然也可以使用它們。
例14-2:提取URL的搜索字符串中的參數 /率 十這個函數用來解析來自URL的查詢串中的name=value參數對 +它將name=value對存儲在一個對象的屬性中,並返回該對象 +這樣來使用它 + var args=urlArgs();//從URL中解析參數 + var q=args.q || ””;//如果參數定義了的話就使用參數}否則使用一個默認值 +var n=args.n ? parselnt(args.n):1O, +/ function urlArgs(){ var args={); //定義一個空對象 var query=location.search.substring(1); //查找到查詢串,並去掉‘?’ var pairs=query.split(”&”); //根據”&”符號將查詢字符串分隔開 for(var i:o;i<pairs.length; i++){ //對於每個片段 var pos=pairs[i].indexof(‘=’); /,查找”name=value” if (pos==-i) continue; //如果沒有找到的話,就跳過 var name=pairs[i].substring(o,pos), ll提取name var value=pairs[i].substring(pos+1); ll提取value value=decodeURIComponent(value); //對value進行解碼 args[name]=value; //存儲為屬性 ) return args; //返回解析后的參數 )
Location對象的assign()方法可以使窗口載入並顯示你指定的URL中的文檔。replace()方法也類似,但它在載入新文檔之前會從瀏覽歷史中把當前文檔刪除。如果腳本無條件地載入一個新文檔,replace()方法可能是比assgin()方法更好的選擇。否則, “后退”
按鈕會把瀏覽器帶回到原始文檔,而相同的腳本則會再次載入新文檔。如果檢測到用戶的瀏覽器不支持某些特性來顯示功能齊全的版本,可以用location.replace()來載入靜態的HTML版本。
//如果洳覽器不支持XMLHttpRequest對象
//則將其置定向到一個不需要Ajax的靜態頁面
if (IXMLHttpRequest) location.replace(”staticpage.html”);
注意,在這個例子中傳人replace()的是一個相對URL。相對URL是相對於當前頁面所在的目錄來解析的,就像將它們用於一個超鏈接中。除了assgin()和replace0方法,Location對象還定義了reload()方法,后者可以讓瀏覽器重新載入當前文檔。
使瀏覽器跳轉到新頁面的一種更傳統的方法是直接把新的URL賦給location屬性:
location=“http://www.oreilly.com”;//在此網站購買書!
還可以把相對URL賦給location,它們會相對當前URL進行解析:
location=”page2.html”; //載入下一個頁面
純粹的片段標識符是相對URL的一種類型,它不會讓瀏覽器載入新文檔,但只會使它滾動到文檔的某個位置。#top標識符是個特殊的例子:如果文檔中沒有元素的ID是“top”,它會讓瀏覽器跳到文檔開始處。
location=“#top”; //跳轉到文檔的頂部
Location對象的URL分解屬性是可寫的,對它們重新賦值會改變URL的位置,並且導致瀏覽器載入一個新的文檔(如果改變的是hash屬性,則在當前文檔中進行跳轉):
location.search = ”?page=”+(pagenum+i);//載入下一個頁面