js 勇闯天涯(BOM)

217 阅读3分钟

一、窗口

1.1、窗口位置

window 对象的属性和方法有很多,screenLeftscreenTop 分别用于表示窗口相对于屏幕左边和上边的位置,

    var leftPos = (typeof.window.screenLeft == "number") ? window.screenLeft:window.screenX; 
    var topPos = (typeof.window.screenTop == "number")? window.screenTop:window.screenY;
1.2、窗口大小

获取页面视口的大小,在IE、Firefox、Opera 和 chrome 中,document.documentElement.clientWidthdocument.documentElement.clientHeight中保存了页面视口的信息,在 IE6中,这些属性必须在标准模式下才有效,如果是混杂模式,就必须通过 document.body.clientWidthdocument.body.clientHeight 取得相同信息,页面视口的大小,可以通过以下方式获取

var pageWidth = Window.innerWidth;
var pageHeight = Window.innerHeight;

if( typeof pageWidth != "number"){
    if(document.compatMode == "CSSlCompat"){  //compatMode 是否是标准模式
        pageWidth = document.documentElement.clientWidth;
        pageHeight = document.documentElement.clientHeight;
    }else{
         pageWidth = document.body.clientWidth;
         pageHeight = document.body.clientHeight;
    }
}

二、location 对象

location 是最有用的BOM对象之一,它提供了与当前窗口中加载的文档有关的信息。

属性名 例子 说明
hash "#contents" 返回URL中的hash(#号后跟零或多个字符串),如果URL中不包含散列,则返回空字符串
host "www.worx.com:80" 返回服务器名称和端口号 (如果有)
hostname "www.worx.com" 返回不带端口号的服务器的名称
href "www.baidu.com" 返回当前加载页面的完整的URL,而location对象的toString() 方法也返回这个值
pathname "/user/" 返回URL中的目录和(或)文件名
port "8080" 返回URL中指定的端口号。如果URL中不包含端口号,则这个属性返回空字符串
protocol "http:" 返回页面使用的协议。通常是http:或https:
search "?q=javascript" 返回URL的查询字符串,这个字符串以问号开头

2.1、查询字符串参数

以上属性可以访问到location 对象的大多数信息,但是其中访问URL包含的查询字符串的属性不太方便,可以像下面创建一个函数,用以解析查询字符串,然后返回一个包含所有参数的对象:

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<len;i++){
        item = items[i].split("=");
        name = decodeURIComponent(item[0]);
        value = decodeURIComponent(item[1);
        if(name.lenght){
            args[name] = value;
        }
    }
}

//假设查询的字符串是?q=javascript & num = 10
var args = getQueryStringArgs();
alert(args["q"]) // "javascript"
alert(args["num"]) //"10"

2.2、位置操作

使用location 对象可以通过很多方式改变浏览器的位置

其实都是调用assign 方法 并为其传递一个URL, location.assign("http://www.baidu.com");

注意:

当通过上述方式修改URL之后,浏览器的历史记录中就会生成一条新记录,因此用户通过单机“后退”按钮都会导航到一个页面,要禁止这种行为,可以使用replace 方法,这个方法只接受一个参数,即要导航到的URL,结果虽然会导致浏览器位置改变,但不会在历史记录中生成新记录,在调用replace() 方法之后,用户不能回到前一个页面,使用场景,二级页面,在用户登陆之后,点击回退按钮,又调到了登陆页面,这个是通病,特别是在使用APP的时候,左滑动,又回到了登陆页,当然App 有App 的解决方法,在浏览器中可以使用replace

<script>
   setTimeout(function(){
       location.replace("http://www.baidu.com")
   })
</script>

三、小结

浏览器对象模型BOM 以window 对象为依托,表示浏览器窗口以及页面可见区域,同时,window 对象还是ECMAScript 中的Global 对象,因而所有全局变量和函数都是它 的属性。

  1. 使用location 对象可以通过百年城方式来访问浏览器的导航系统,设置相应的属性,可以逐段或整体性的修改浏览器的URL。
  2. 调用replace() 方法可以导航到一个新的URL,同时该URL会替换浏览器历史记录中当前显示的页面