JavaScript window.location對象


JavaScript window.location對象

 

經常使用window.location,它的結構總是記不住,簡單梳理下,方便以后查詢。

 

location 地址對象 它描述的是某一個窗口對象所打開的地址。要表示當前窗口的地址,只需要使用“location”就行了;若要表示某一個窗口的地址,就使用“<窗口對象>.location”。

注意 屬於不同協議或不同主機的兩個地址之間不能互相引用對方的 location 對象,這是出於安全性的需要。例如,當前窗口打開的是“www.a.com”下面的某一頁,另外一個窗口(對象名為:bWindow)打開的是“www.b.com”的網頁。如果在當前窗口使用“bWindow.location”,就會出錯:“沒有權限”。這個錯誤是不能用錯誤處理程序(Event Handler,參閱 onerror 事件)來接收處理的。

示例

URL:http://b.a.com:88/index.php?name=kang&when=2011#first

     
protocol: 協議 "http:"
hostname: 服務器的名字 "b.a.com"
port: 端口 "88"
pathname: URL中主機名后的部分 "/index.php"
search: "?"后的部分,又稱為查詢字符串 "?name=kang&when=2011"
hash: 返回"#"之后的內容 "#first"
host: 等於hostname + port "b.a.com:88"
href: 當前頁面的完整URL "http://www.a.com:88/index.php?name=kang&when=2011#first"

window.location和document.location互相等價的,可以交換使用

location的8個屬性都是可讀寫的,但是只有href與hash的寫才有意義。例如改變location.href會重新定位到一個URL,而修改location.hash會跳到當前頁面中的anchor(<a id="name">或者<div id="id">等)名字的標記(如果有),而且頁面不會被重新加載

注意

URL:http://b.a.com:88/index.php?name=kang&how=#when=2011#first

search: "?name=kang&how=" 第一個"?"之后
hash: "#when=2011#first" 第一個"#"之后的內容
方法location.assign( url ) location.assign('http://www.baidu.com'); 等同於 window.location = 'http://www.baidu.com'
這種方式會講新地址放到瀏覽器歷史棧中,意味着轉到新頁面后“后退按鈕”仍可以回到該頁面。 location.replace( url ) 與assign方法一樣,但會從瀏覽器歷史棧中刪除本頁面,也就是說跳轉到新頁面后“后退按鈕”不能回到該頁面。目前IE、Chrome只是簡單的跳轉,只有Firefox會刪除本頁面的歷史記錄。 location.reload( force ) 重新載入當前頁面。force為true時從服務器端重載;false則從瀏覽器緩存中重載,默認值false。
 
reload 方法,該方法強迫瀏覽器刷新當前頁面。
語法: location.reload([bForceGet])
參數: bForceGet, 可選參數, 默認為 false,從客戶端緩存里取當前頁。true, 則以 GET 方式,從服務端取最新的頁面, 相當於客戶端點擊 F5("刷新")

replace 方法,該方法通過指定URL替換當前緩存在歷史里(客戶端)的項目,因此當使用replace方法之后,你不能通過“前進”和“后退”來訪問已經被替換的URL。
語法: location.replace(URL)
在 實際應用的時候,重新刷新頁面的時候,我們通常使用: location.reload() 或者是 history.go(0) 來做。因為這種做法就像是客戶端點F5刷新頁面,所以頁面的method="post"的時候,會出現“網頁過期”的提示。那是因為Session的安全 保護機制。可以想到: 當調用 location.reload() 方法的時候, aspx頁面此時在服務端內存里已經存在, 因此必定是 IsPostback 的。如果有這種應用: 我們需要重新加載該頁面,也就是說我們期望頁面能夠在服務端重新被創建, 我們期望是 Not IsPostback 的。這里,location.replace() 就可以完成此任務。被replace的頁面每次都在服務端重新生成。你可以這么寫: location.replace(location.href)

下面是相關的應用與知識點:
window.location.href
window.top.location.replace("http://www.jb51.net")
top.location.href("http://www.jb51.net")
window.navigate ("http://www.jb51.net")
Html:
<meta http-equiv="Refresh" content="0; url=http://baidu.com/" >
---------------------------------------
URL即:統一資源定位符 (Uniform Resource Locator, URL)
完整的URL由這幾個部分構成:
scheme://host:port/path?query#fragment
scheme:通信協議
常用的http,ftp,maito等
host:主機
服務器(計算機)域名系統 (DNS) 主機名或 IP 地址。
port:端口號
整數,可選,省略時使用方案的默認端口,如http的默認端口為80。
path:路徑
由零或多個"/"符號隔開的字符串,一般用來表示主機上的一個目錄或文件地址。
query:查詢
可選,用於給動態網頁(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技術制作的網頁)傳遞參數,可有多個參數,用"&"符號隔開,每個參數的名和值用"="符號隔開。
fragment:信息片斷
字符串,用於指定網絡資源中的片斷。例如一個網頁中有多個名詞解釋,可使用fragment直接定位到某一名詞解釋。(也稱為錨點.)
對於這樣一個URL
http://www.jb51.net:80/fisker/post/0703/window.location.html?ver=1.0&id=6#imhere

我們可以用javascript獲得其中的各個部分
1, window.location.href
整個URl字符串(在瀏覽器中就是完整的地址欄)
本例返回值: http://www.jb51.net:80/fisker/post/0703/window.location.html?ver=1.0&id=6#imhere
2,window.location.protocol
URL 的協議部分
本例返回值:http:
3,window.location.host
URL 的主機部分
本例返回值:www.jb51.net
4,window.location.port
URL 的端口部分
如果采用默認的80端口(update:即使添加了:80),那么返回值並不是默認的80而是空字符
本例返回值:""
5,window.location.pathname
URL 的路徑部分(就是文件地址)
本例返回值:/fisker/post/0703/window.location.html
6,window.location.search
查詢(參數)部分
除了給動態語言賦值以外,我們同樣可以給靜態頁面,並使用javascript來獲得相信應的參數值
本例返回值:?ver=1.0&id=6
7,window.location.hash
錨點
本例返回值:#imhere


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM