js中的BOM

本文详细介绍了浏览器对象模型(BOM)的核心概念及其在Web开发中的应用,包括如何使用BOM进行窗口位置和大小的调整、导航和弹窗操作等。此外,还探讨了location对象的使用方法和navigator对象在浏览器类型检测中的作用。
摘要由CSDN通过智能技术生成

在Web中使用js,那么BOM(浏览器对象模型)是真正的核心。BOM提供了很多对象,用于访问浏览器的功能,这些功能与任何网页内容无关。BOM的核心对象是window,它表示浏览器的一个实例。它既是通过js访问浏览器窗口的接口,又是js的Global对象(所有全局变量挂载在上面)。

窗口关系及框架

如果页面中包含框架,则每个框架都拥有自己的window对象,并且保存在frames的集合中。

窗口位置

用来确定和修改window对象位置的属性和方法有很多,然而我们无法在跨浏览器的条件下取得窗口左边和上边的精确坐标值(这里我们可以参考另一篇博文浏览器中的宽高)。然而使用moveTo和moveBy方法倒是有可能将窗口精确地移动到一个新位置

   window.moveTo(0, 0);
   //将窗口向下移动100像素
   window.moveBy(0, 100);

窗口大小

跨浏览器确定一个窗口的大小不是一件容易的事。但我们可以获得页面视口的大小

   var pageWidth = window.innerWidth,
       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;
       }
   }

可以使用resizeTo和resizeBy方法调整浏览器窗口的大小。

   //调整到100*100
   window.resizeTo(100, 100);
   //调整到200*150
   window.resizeBy(100, 50);

这两个方法和移动窗口位置的方法类似,有可能被浏览器禁用

导航和代开窗口

使用window.open既可以导航到一个特定的URL,也可以打开一个新的浏览器窗口。接收4个参数:要加载的URL,窗口目标,一个特性字符串以及一个表示新页面是否取代浏览器历史记录中加载页面的布尔值

   window.open('http://www.wrox.com', 'topFrame');

调用这行代码,就如同用户单击了href属性为http://www.wrox.com,target属性为topFrame的a链接

   window.open('http://www.wrox.com', 'topFrame','height=400, width=400, top=10, left=10');

如果浏览器扩展或其他程序阻止弹出窗口,那么window.open通常会抛出一个错误,所以可以这样处理

   var blocked = false;
   try {
      var wroxWin = window.open('http://www.wrox.com', '_blank');
      if(wroxWin == null){
          blocked = true;
      }
   } catch(e){
      blocked = true;
   }
   if(blocked){
      alert('The popup was blocked');
   }

location

location对象是最有用的BOM对象之一,它提供了与当前窗口加载文档有关的信息,还提供了一些导航功能。
location.search返回从问号到URL末尾的所有内容(包括问号)。我们通常会使用这样一个函数来解析search

   function getQueryStringArgs(){
      //去掉问号
      var qs = location.search.length > 0 ? location.search.substring(1) : '';
      var args = {};
      var items = qs.length ? qs.split('&') : [];
      var item = null, 
         name = null,
         value = null;
      for(var i = 0, len = items.length; i < len; i++){
          item = items[i].split('=');
          name = item.decodeURIComponent(item[0]);
          value = item.decodeURIComponent(item[1]);
          if(name.length){
             arg[name] = value;
          }
      }
      return args;
   }

将每个查询字符串参数都变成返回对象的属性。

位置操作

使用assign方法可以立即打开新URL并在浏览器的历史记录中生成一条记录

   location.assign('http://www.wrox.com');

这个效果等同于下面两种

   window.location = 'http://www.wrox.com';
   location.href = 'http://www.wrox.com';

除了修改location的hash(锚点),其他属性的修改都会导致页面以新的URL重新加载(location.search,location.port等等)

navigator的userAgent常用于检测显示网页的浏览器类型

history对象

   //后退一页
   history.go(-1);
   //前进一页
   history.go(1);

history中的pushState常用于异步加载新内容的记录插入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值