BOM的学习(2)

间歇与超时调用

我们知道,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");//亲测这个方法把浏览器卡的死死的,差评方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值