间歇与超时调用
我们知道,Javascript是单线程语言,但它允许通过设置超时值和间歇值来调度代码在特定的时刻执行。超时调用是在指定的时间后执行代码,而后者则是每隔指定时间就调用一次代码。
超时调用需要使用window对象的setTimeout()方法,这个方法接收两个参数:要执行的代码和以毫秒表示的时间。其中,第一个参数可以是一个包含javascript代码的字符串,也可以是一个函数。第二个参数是表示需要等待多少毫秒
setTimeout("alert('hello,world')",2000);//第一个参数不建议传递字符串
setTimeout(function(){
alert("hello world");
},2000)
调用完成后会返回一个数值ID,表示超时调用,这个超时调用ID是计划执行代码耳朵唯一标识符,可以通过它来取消超时调用。可以使用clearTimeout()取消调用
var timeoutId=setTimeout(function(){alert("hello,world")},2000);
clearTimeout(timeoutId);//取消超时调用
间歇调用使用方法和超时调用类似,只不过他会按照指定的时间间隔重复执行代码,直至间歇调用被取消或有页面被卸载。设置间歇调用的方法是setInterval(),他接受的参数与setTimeout()相同
var interval=setInterval("alert('hello')",2000)
clearInterval(interval);//取消间歇调用
系统对话框
浏览器通过alert()、prompt()、confirm()
方法可以调用系统对话框向用户显示消息。系统对话框与在浏览器显示的页面没有关系,对话框的外观由浏览器决定,并且在显示的时候代码会停止执行
//第一种alert()方法,接收一个字符串并显示给用户。
alert("hello");
//第二种方法confirm()方法,调用后得到的系统框会有一个确定一个取消,为了确定用户单击的是确定还是取消,这个方法会返回一个布尔值。
if (confirm("是否擦亮炉石")) {
alert("您花费了1600奥术之尘")
}else{
alert("滚出我的丛林")
}
//第三种是用户输入框,可以获得用户输入的信息
var item=prompt("请输入您的心悦等级")
if (item<5) {
alert("快滚去充值")
}else{
alert("尊敬的"+item+"级心悦会员,感谢您")
}
location对象
这个对象是最有用的BOM对象之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能。事实上location对象是很特别的一个对象,他即是window对象的一个属性,也是document对象的属性,location对象的用处不只表现在它保存着当前文档的信息,还表现在它将URL解析为独立的片段。
- hash:返回URL中的hash(#号后跟0或多个字符),如果URL中不包括散列,则返回空字符串
- host:返回服务器名称和端口号
- hostname:返回不带端口号的服务器名称
- href:完整URL,location对象的toString()也返回这个值
- pathname:返回URL中的目录或文件名
- port:返回URL中指定的端口号。如果URL中不包括端口号则返回空字符串
- protocol:返回页面中使用的协议。通常是http或者https
- search:返回URL中的查询字符串
查询字符串参数函数
(function search(){
var qs=(location.search.length)>0?location.search.substring(1):"";
var args={};
var items=qs.length?qs.split("&"):[];
for(var i=0;i<items.length;i++){
var item=items[i].split("=");
var name=decodeURIComponent(item[0]);
var value=decodeURIComponent(item[1]);
if (name.length) {
args[name]=value;
}
}
return args
})()
上式定义了一个search函数用来查找URL中特定的查询字符串,首先除去查询字符串开头的问号,然后将所有字符串放在args对象中,这样就能够简化了对每个参数的访问.
位置操作
我们使用location对象可以通过很多方式改变浏览器的位置。最常用的方式就是使用assign()方法传递一个URL。
location.assign("http://www.burningay.top");//加载URL指向一个新的文档,如同链接
location.replace("http://www.burningay.top");//加载URL替换当前文档
我们可以通过location对象的其他属性来修改当前加载的页面
//假设原URL为http://www.burningay.top/index.html
location.hash="#github"//www.burningay.top/index.html#github
location.search="?q=javascript";//www.burningay.top/index.html/?q=javascript
location.hostname="www.baidu.com";//www.baidu.com
最后一个与location对象有关的方法是location.reload()。这个方法的作用是重新加载这个页面。
location.reload();//有可能从缓存中加载
location.reload(true);//从服务器重新加载
navigator对象
检测浏览器是否含有特定的插件是一种非常常见的属性检测。对于非IE浏览器可以使用plugins数组来达到这个目的
- name:插件名
- description:插件描述
- filename:插件的文件名
- length:插件所处理的MIME类型数量.
我们可以通过下列代码来检测是否存在某类插件
//除IE
function hasPlugins(name){
name=name.toLowerCase();
for(var i=0;i<navigator.plugins.length;i++){
if (navigator.plugins[i].name.toLowerCase().indexOf(name)>-1) {
return true;
}
}
return false
}
alert(hasPlugins("Flash"));
alert(hasPlugins("QuickTime"))
//IE中
function hasIEPlugins(name){
try{
new ActiveXObject(name);
return true;
}catch(ex){
return false;
}
}
alert(hasIEPlugins("ShockwaveFlash.ShockwaveFlash"))
//检测所有浏览器中是否存在Flash个插件
function hasFlash(){
var result=hasPlugin("Flash");
if (!result) {
result=hasIEPlugins("ShockwaveFlash.ShockwaveFlash");
}
return result;
}
history对象
history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起。因为history是window对象的属性,因此每个窗口标签框架都有自己的history对象与特定的window对象关联。
使用go()方法可以在用户的历史记录中跳转,可以向前向后,这个方法接受一个参数,表示向后或者向前跳转的一个数值,负数表示向后跳转,正数表示向前跳转.
history.go(-1);//上一页
history.back();//上一页
history.go(1);//下一页
history.forward();//下一页
//也可以传递一个字符串,此时会跳转到距离该网页最近的位置,如果历史记录啥也没有,那么就什么都不做
history.go("www.baidu.con");//亲测这个方法把浏览器卡的死死的,差评方法