想要知道怎樣解決這個(gè)問(wèn)題,首先我們先認(rèn)識(shí)一下Location對(duì)象爷绘。
Location對(duì)象包含了當(dāng)前頁(yè)面與位置(url)相關(guān)的信息
URL示例:http://www.baidu.com:80/news/index.aspx?id=1&name=location#top
Location對(duì)象共定義了8個(gè)屬性:
href:聲明了當(dāng)前顯示文檔的完整的URL
protocol:聲明URL的協(xié)議部分书劝,包括后綴的冒號(hào),例如http:
host:聲明當(dāng)前URL的主機(jī)名和端口號(hào)(是hostname和port的合集)土至,例如www.baidu.com:80
hostname:聲明當(dāng)前URL的主機(jī)名购对,例如www.baidu.com
port:聲明當(dāng)前URL的端口部分,例如80
pathname:聲明當(dāng)前URL的路徑部分陶因,例如news/index.aspx
search:聲明當(dāng)前URL的查詢(xún)部分骡苞,例如?id=1&name=localhost
hash:聲明當(dāng)前URL的錨的部分,例如#top楷扬,指定在文檔中的錨記的名稱(chēng)
Location對(duì)象的這些屬性都是可讀可寫(xiě)的解幽,如果改變了文檔的location.href,則瀏覽器會(huì)載入新的頁(yè)面烘苹。同樣如果改變了location.hash躲株,則頁(yè)面會(huì)跳轉(zhuǎn)到新的錨點(diǎn),但此時(shí)頁(yè)面不會(huì)重載镣衡。
想必大家會(huì)想霜定,這個(gè)與link對(duì)象的url屬性類(lèi)似啊,不過(guò)link對(duì)象表示的是文檔中的超鏈接廊鸥,而Location對(duì)象表示的是瀏覽器當(dāng)前顯示文檔的url然爆。
當(dāng)然,Location對(duì)象還有兩個(gè)方法:reload()和replace()
reload():可以重新裝載當(dāng)前文檔
replace():可以裝載一個(gè)新文檔而無(wú)須為它創(chuàng)建一個(gè)新的歷史記錄黍图。也就是說(shuō)曾雕,在瀏覽器的歷史列表中,新文檔將替換當(dāng)前文檔助被。這樣就不能通過(guò)【返回】按鈕返回當(dāng)前文檔了剖张。
通過(guò)將url字符串信息賦值給窗口的location屬性來(lái)裝載新文檔,可以實(shí)現(xiàn)返回瀏覽揩环。
對(duì)那些使用了框架而且顯示多個(gè)臨時(shí)也的網(wǎng)站來(lái)說(shuō)搔弄,replace()方法比較有用,這樣臨時(shí)頁(yè)面都不被存儲(chǔ)在歷史列表中丰滑。
注意:
不要混淆Window對(duì)象的location屬性和Document對(duì)象的location對(duì)象顾犹。前者引用一個(gè)Location對(duì)象,后者只是一個(gè)只讀字符串,并不具有Location對(duì)象的任何特性炫刷。Document.location與document.URL是同義的擎宝。但是,當(dāng)存在服務(wù)器重定向時(shí)浑玛,document.location包含的是已經(jīng)裝載的URL,而location.href包含的則是原始請(qǐng)求的文檔的URL绍申。
什么是查詢(xún)字符串?就是Location對(duì)象的search屬性的值顾彰,在這里指?id=1&name=location
那么用Locaton對(duì)象結(jié)合String對(duì)象的方法怎么獲取呢?可以用下面這個(gè)函數(shù)獲燃摹:
function getQuery(name)
{
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r!=null) return unescape(r[2]); return null;
}