BOM:瀏覽器對(duì)象模型
1、location是最有用的BOM對(duì)象之一。
2、用途:提供了與當(dāng)前窗口中加載的文檔有關(guān)的信息,還提供一些導(dǎo)航功能。
3、location對(duì)象:既是window對(duì)象的屬性,也是document對(duì)象的屬性。(即window.location和document.location引用的是同一個(gè)對(duì)象)
| 屬性名 | 例子 | 說(shuō)明 |
|---|---|---|
| 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è)字符串以問(wèn)號(hào)開(kāi)頭。 |
location對(duì)象保存著當(dāng)前文檔的信息,還將URL解析為獨(dú)立的片段,讓開(kāi)發(fā)人員可以通過(guò)不同的屬性訪問(wèn)這些片段。
| 屬性名 | 例子 | 說(shuō)明 |
|---|---|---|
| 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è)字符串以問(wèn)號(hào)開(kāi)頭。 |
查詢字符串參數(shù)
創(chuàng)建一個(gè)函數(shù),用以解析查詢字符串,然后返回包含所有參數(shù)的一個(gè)對(duì)象:
function getQueryStringArgs() {
//去的查詢字符串并去掉開(kāi)頭的問(wèn)號(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("=");
//用decodeURIComponent解碼name和value,因?yàn)椴樵冏址畱?yīng)該被編碼過(guò)。
name = decodeURIComponent(item[0]);
value = decodeURIComponent(item[1]);
if (name.length) {
args[name] = value;
}
}
return args;
}
//假設(shè)查詢字符串是?q=javascript&num=10
var args = getQueryStringArgs();
alert(args["q"]); //javascript
alert(args["num"]); //10
位置操作
使用location對(duì)象可以通過(guò)很多方式來(lái)改變?yōu)g覽器的位置。
location.assign("http://www.wrox.com");
window.location = "http://www.wrox.com";
location.; //最常用改變?yōu)g覽器位置的方法
另外,修改location對(duì)象的其他屬性也可以改變當(dāng)前加載的頁(yè)面。
//假設(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.yahho.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重新加載。
replace()
當(dāng)通過(guò)上述任何一種方式修改URL之后,瀏覽器的歷史記錄中就會(huì)生成一條新記錄,因此單擊“后退”按鈕會(huì)導(dǎo)航到前一個(gè)頁(yè)面。
可以用replace()方法禁用上面的行為。
/**
* replace()
* param:要導(dǎo)航到的URL
* 會(huì)導(dǎo)致瀏覽器位置改變,但不會(huì)在歷史記錄中生成新紀(jì)錄。
* 因此在調(diào)用replace()方法之后,用戶不能回到前一個(gè)頁(yè)面。
*/
<!DOCTYPE html>
<html>
<head>
<title>你將不能返回到這兒。</title>
</head>
<body>
<p>請(qǐng)享受這個(gè)頁(yè)面吧,因?yàn)槟銓⒉荒芊祷氐竭@兒來(lái)。</p>
<script type="text/javascript">
setTimeout(function(){
location.replace("http://www.baidu.com");
},1000);
</script>
</body>
</html>
reload()
作用:重新加載當(dāng)前顯示的頁(yè)面。
如果調(diào)用reload()時(shí)不傳遞任何參數(shù),頁(yè)面就會(huì)以最有效的方式重新加載。如果頁(yè)面自上次請(qǐng)求以來(lái)并沒(méi)有改變過(guò),頁(yè)面就會(huì)從瀏覽器緩存中重新加載。如果要強(qiáng)制從服務(wù)器重新加載,則需要像下面這樣為該方法傳遞參數(shù)true。
location.reload(); //重新加載(有可能從緩存中加載)
location.reload(true); //重新加載(從服務(wù)器重新加載)
位于reload()調(diào)用之后的代碼可能會(huì)也可能不會(huì)執(zhí)行,因此最好將reload()放在代碼的最后一行。