浏览器对象模型BOM


windows

BOM的核心对象,表示浏览器的一个实例,既是JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的global对象。

1.全局作用域

全局变量不能通过delete操作符删除,windows对象的属性可以(IE9以下的会抛出错误)

2.窗口关系及框架

如果页面中包含框架,则每个框架拥有自己的window对象,并且保存在frame集合中。每个window对象都有一个name属性,包含框架的名称(除非最高层窗口是通过window.open()打开的,否则其window对象的name属性不会包含任何值)。框架的访问方式:window.frames[i]/top.frames[i]/frames[i]或window.frames[‘name值’]/top.frames[‘name值’]/frames[‘name值’]

  • top对象:始终指向最高层框架;
  • parent对象:指向当前框架的直接上层框架;
  • s**elf对象**:始终指向window,两者可以互换使用。
    这些都是window对象的属性

注:每个框架都有一套自己的构造函数,这些构造函数一一对应,但并不相等。

3.窗口位置

跨浏览器获取窗口左边和上边到屏幕的位置:

// 由于Firefox、Safari、Chrome始终返回的是每个框架的top.screenX/Y,当窗口被设置有外边距的时候,会出现问题
var leftPos = (typeof window.screenLeft=='number' ? window.screenLeft : window.screenX);
var topPos = (typeof window.screenTop=='number' ? window.screenTop : window.screenY);

4. 窗口大小

//页面可视区宽高
var pageWidth = window.innerWidth;
var pageHeight = window.innerHeight;
if(typeof pageWidth != 'number'){
    if(document.compatMode == 'CSS1Compat'){
        pageWidth = document.documentElement.clientWidth 
        pageHeight = document.documentElement.clientHeight
    }else{
        pageWidth = document.body.clientWidth 
        pageHeight = document.body.clientHeight
    }
}
//内容宽高(包括边线和滚动条的宽)
document.body.offsetWidth 
document.body.offsetHeight 
//滚动条滚动的距离
document.body.scrollTop||document.documentElement.scrollTop;
document.body.scrollLeft||document.documentElement.scrollLeft;
//内容实际宽高(包括隐藏部分)
document.body.scrollWidth
document.body.scrollHeight

注意:移动设备更加复杂

浏览器窗口事件

  • window.onresize : 窗口大小改变时触发;
  • window.scroll:窗口滚动条滚动时触发。

5. 导航和打开窗口

window.open(url,窗口目标,一个设置新窗口特性的字符串,布尔值->新页面是否取代浏览器历史记录中当前加载页面)
window.close(): 关闭window.open()打开的窗口;
top.close():弹出窗口关闭自己;
浏览器的主窗口,没有用户的允许不能关闭。


location对象

它既是window对象的属性,也是document对象的属性。

属性说明
hash字符串,返回url中的hash
href字符串,返回当前加载页面的完整url
search字符串,返回url的查询字符串,以?开头

1.查询字符串

function getQueryStringArgs(){
    // 获取查询字符串并除去开头的问号
    var qs = location.search.length>0 ? location.search.substring(1):'';
    if(!qs){
        return ""
    }
    var args,arr = qs.split('&');
    for (var i = 0; i <  arr.length; i++) {
        var itemArr = arr[i].split('=');
        var name = decodeURIComponent(itemArr[0]);
        var value = decodeURIComponent(itemArr[1]);
        args[name] = value;
    }
    return args;
}
function getQuery(name){
   var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
    var r =window.location.search.substr(1).match(reg);//从?之后开始匹配如getQuery(courseid)返回一个数组["courseid=8","","8","&",index:0,input:"courseid=8"]
    return r ? decodeURIComponent(r[2]):null;
}

2. 位置操作

location.assign(url):打开新的url并生成历史记录
每次修改location的属性(search,hostname,pathname,port,除hash),页面都会一新的url重新加载。并且有后退功能。
loction.replace(url):打开新的url,没有后退功能。
loction.reload():重新加载(可能从缓存中加载)
loction.reload(true):重新加载(从服务器加载)


识别客户端浏览器的标准

检测插件

非IE浏览器中,plugins数组(每个元素具有name,description,filename,length四个属性)
IE浏览器中,以COM标示符来检查的

//非IE
 function hasPlugin (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;
 }
//IE
 function hasIEPlugin (name) {
     try {
         new ActiveXObject(name);
         return true;
     } catch (ex) {
         return false;
     }
 }

screen对象

表明客户端的能力,不常用


history对象

history.go(-1) //后退一页
history.go(1) //前进一页
history.go(2) //前进两页
history.go(url) //跳转到历史记录包含该字符串的第一个位置,如果历史记录不包含改url则什么也不做。
history.length //历史记录的数量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值