作者:岩律_619 | 来源:互联网 | 2023-10-15 22:46
8.2location对象location对象既是window对象的属性,也是document对象的属性.window.location和document.location引用的是同一个对象.
8.2location对象
location对象既是window对象的属性,也是document对象的属性.
window.location和document.location引用的是同一个对象.
属性名 |
例子 |
说明 |
hash |
“#contents” |
返回URL中的hash(#号后跟零或多个字符),如果URL中不包含散列,则返回空字符串 |
host |
“www.baidu.com:80” |
返回服务器名称和端口号(如果有) |
hostname |
“www.baidu.com” |
返回不带端口号折服务器名称 |
href |
“http:/www.baidu.com” |
返回当前加载页面的完整URL.而location对象的toString()方法也返回这个值 |
pathname |
“WileyCDA” |
返回URL中的目录和(或)文件名 |
port |
“8080” |
返回URL中指定的端口号.如果URL中不包含端口号,则这个属性返回空字符串 |
protocol |
“http:” |
返回页面使用的协议.通常是http:或https: |
search |
“?q=Javascript” |
返回URL的查询字符串.这个字符串以问号开头 |
8.2.1 查询字符串参数
location.search返回的是从问号开始(包括问号)到#号(不包括#号)之间的内容.
function getQueryStringArgs(){
var qs=(location.search.length>0?location.search.substring(1):""),
//保存数据的对象
args={},
//取得每一项
items=qs.length?qs.split("&"):[],
item=null,
name=null,
value=null,
//在for循环中使用
i=0,
len=items.length;
//逐个将每一项添加到args对象中
for(i=0;i){
item=items[i].split("=");
name=decodeURIComponent(item[0]);
value=decodeURIComponent(item[1]);
if(name.length){
args[name]=value;
}
}
return args;
}
8.2.2 位置操作
使用assign()方法并为其传递一个URL
location.assign(http://www.baidu.com);
这样就立即打开新URL并在浏览器的历史记录中生成一条记录.下面两行代码与显示调用assign()方法一样
window.location="http://www.baidu.com";
location.href=http://www.baidu.com;
可以通过将hash,search,hostname,pathname和port属性设置为新值来改变URL.
每次修改location的属性(hash除外),页面都会以新URL重新加载.
https://www.baidu.com/?tn=92499072_hao_pg
location.hash="#section1";//https://www.baidu.com/?tn=92499072_hao_pg#section1
location.search="?q=Javascript";//https://www.baidu.com/?q=Javascript#section1(页面刷新)
location.hostname="www.yahoo.com";//https://www.yahoo.com/?q=Javascript#section1(页面刷新)
location.pathname="mydir";//https://www.yahoo.com/?err=404&err_url=https%3a%2f%2fwww.yahoo.com%2fmydir%3fq%3dJavascript(页面刷新)
location.port="8080";//https://www.yahoo.com:8080/?err=404&err_url=https%3a%2f%2fwww.yahoo.com%2fmydir%3fq%3dJavascript:1 GET https://www.yahoo.com:8080/?err=404&err_url=https%3a%2f%2fwww.yahoo.com%2fmydir%3fq%3dJavascript net::ERR_CONNECTION_TIMED_OUT
replace(),只接受一个参数,即要导航到的URL,结果会导致浏览器位置改变,但不会在历史记录中生成新记录.
在调用replace()方法之后,用户不能回到前一个页面.
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
<script>
script>
head>
<body>
<p>Enjoy this page for a second,because you won't be coming back here.p>
<script type="text/Javascript">
setTimeout(function(){
location.replace("http://www.baidu.com/");
})
script>
body>
html>
reload()方法,作用是重新加载当前显示的页面.如果调用reload()时不传递任何参数,页面应付以最有效的方式重新加载.
如果页面自上次请求以来并没有改变过,页面就会从浏览器缓存中重新加载.
如果要强制从服务器重新加载,则:
location.reload();//重新加载(有可能从缓存中加载)
location.reload(true);//重新加载(从服务器重新加载)
8.3 navigator对象
navigator对象是所有支持Javascript的浏览器所共有的.
与其他BOM对象的情况一样,每个浏览器中navigator对象都有一套自己的属性.
下面列出了存在于所有浏览器中的属性和方法,以及支持它们的浏览器版本.
属性或方法 |
说明 |
IE |
FF |
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 |
浏览器版本.一般不与实际的浏览器版本对应 |
3.0+ |
1.0+ |
1.0+ |
7.0+ |
buildID |
浏览器编译版本 |
- |
2.0+ |
- |
- |
COOKIEEnabled |
表示COOKIE是否启用 |
4.0+ |
1.0+ |
1.0+ |
7.0+ |
cpuClass |
客户端计算机中使用的CPU类型(X86,68K,Alpha,PPC或Other) |
4.0+ |
- |
- |
- |
javaEnabled() |
表示当前浏览器中是否启用java |
4.0+ |
1.0+ |
1.0+ |
7.0+ |
language |
浏览器的主语言 |
- |
1.0+ |
1.0+ |
7.0+ |
mimeTypes |
在浏览器中注册的MIME类型数组 |
4.0+ |
1.0+ |
-1.0+ |
7.0+ |
onLine |
表示浏览器是否连接了因特网 |
4.0+ |
1.0+ |
- |
9.5+ |
opsProfile |
似乎早就不用了.查不到相关文档 |
4.0+ |
- |
- |
- |
oscpu |
客户端计算机的操作系统或使用的CPU |
- |
1.0+ |
- |
- |
platform |
浏览器所有的系统平台 |
4.0+ |
1.0+ |
1.0+ |
7.0+ |
plugins |
浏览器中安装的插件信息的数组 |
4.0+ |
1.0+ |
1.0+ |
7.0+ |
preference() |
设置用户的首选项 |
- |
1.5+ |
- |
- |
product |
产品名称(如Gecko) |
- |
1.0+ |
1.0+ |
- |
productSub |
关于产品的次要信息(如Gecko的版本) |
- |
1.0+ |
1.0+ |
- |
registerContentHandler() |
针对特定的MIME类型将一个站点注册为处理程序 |
- |
2.0+ |
- |
- |
registerProtocolHandler() |
针对特定的协议将一个站点注册为处理程序 |
- |
2.0+ |
- |
- |
securityPolicy |
已经废弃.安全策略的名称. |
- |
1.0+ |
- |
- |
systemLanguage |
操作系统的语言 |
4.0+ |
- |
- |
- |
taintEnabled() |
已经废弃.表示是否允许变量被修改(taint) |
4.0+ |
1.0+ |
- |
7.0+ |
userAgent |
浏览器的用户代理字符串 |
3.0+ |
1.0+ |
1.0+ |
7.0+ |
userLanguage |
操作系统的默认语言 |
4.0+ |
- |
- |
7.0+ |
userProfile |
借以访问用户个人信息的对象 |
4.0+ |
- |
- |
- |
vendor |
浏览器的品牌 |
- |
1.0+ |
1.0+ |
- |
verdorSub |
有关供应商的次要信息 |
- |
1.0+ |
1.0+ |
- |
|
|
|
|
|
|
8.3.1 检测插件
对于非IE浏览器,可以使用plugins数组来检测浏览器虽是否安装特定插件.
该数组中的每一项都包含下列属性:
name:插件的名字.
description:插件的描述.
filename:插件的文件名
length:插件所处理的MIME类型数量
//检测插件(在IE中无效)
function hasPlugin(name){
name=name.toLowerCase();
for( var i = 0; i ){
if(navigator.plugins[i].name.toLowerCase().indexOf(name)>-1){
return true;
}
}
return false;
}
//检测Flash
console.log(hasPlugin("Flash"));
//检测QuickTime
console.log(hasPlugin("QuickTime"));
每个插件对象本身也是一个MimeType对象的数组,这些对象可以通过方括号语法来访问.每个MimeType对象有4个属性:包含MIME类型描述的description,回指插件对象的enabledPlugin,表示与MIME类型对应的文件扩展名的字符串suffixes(以逗号分隔)和表示完整MIME类型字符串的type.
//检测IE中的插件
function hasIEPlugin(name){
try{
new ActiveXObject(name);
return true;
}catch(ex){
return false;
}
}
//检测Flash
console.log(hasIEPlugin("ShockwaveFlash.ShockwaveFlash"));
//检测QuickTime
console.log(hasIEPlugin("QuickTime"));
鉴于检测这两种插件的方法差别太大,因此典型的做法是针对每个插件分别创建检测函数.
//检测所有浏览器中的Flash
function hasFlash(){
var result=hasPlugin("Flash");
if(!result){
result=hasIEPlugin("ShockwaveFlash.ShockwaveFlash");
}
return result;
}
//检测所有浏览器中的QuickTime
function hasQuickTime(){
var result=hasPlugin("QuickTime");
if(!result){
result=hasIEPlugin("QuickTime.QuickTime");
}
return result;
}
//检测Flash
console.log(hasFlash());
//检测QuickTime
console.log(hasQuickTime());
plugins集合有一个名叫refresh()的方法,用于刷新plugins以反映最新安装的插件.这个方法接收一个参数:表示是否应该重新加载页面的一个布尔值.如果将这个值设置为true,则会重新加载包含插件的所有页面;否则,只更新plugins集合,不重新加载页面.
8.3.2 注册处理程序
FF2为navigator对象新增了registerContentHandler()和registerProtocoHandler()方法.
registerContentHandler()方法接收三个参数:要处理的MIME类型,可以处理该MIME类型的页面的URL以及应用程序的名称.
类似的调用方式也适用于registerProtocolHandler()方法,它也接收三个参数:要处理的协议,处理该协议的页面的URL和应用程序的名称.