• 《JavaScript高级程序设计》笔记:BOM(八)


    BOM(浏览器对象模型)提供了很多对象,用于访问浏览器的功能,这些功能与任何网页内容无关。

    window对象

    全局作用域

    定义全局变量与在window对象上直接定义属性还是有一点差别:全局变量不能通过delete操作符删除,而直接在window对象上的定义的属性可以。

    var age = 29;
    window.color = "red";
    
    delete window.age;
    delete window.color;
    
    console.log(window.age); //29
    console.log(window.color); // undefined

    窗口关系及框架

    window.top: 指定最高(最外)层的框架
    window.parent:指向当前框架的直接上层框架,在某些情况下,parent有可能等于top

    窗口位置

    使用下列代码可以跨浏览器取得窗口左边和上边的位置:

    var leftPos = (typeof window.screenLeft =="number" )? window.screenLeft : window.screenX;
    
    var topPos = (typeof window.screenTop =="number") ? window.screenTop:window.screenY;
    
    console.log(leftPos);
    console.log(topPos);

    窗口大小

    虽然无法确定浏览器窗口本身的大小,但却可以取得页面视口的大小。

    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;
        }
    
    }
    
    console.log(pageWidth);
    console.log(pageHeight);

    location对象

    location对象是一个很特别的对象,因为它既是window对象的属性,又是document对象的属性。换句话说,window.location和document.location引用的是同一个对象。

    查询字符串参数

    function getQueryStringArgs(){
        //取得查询字符串并去掉开头的问号
        var qs = (location.search.length > 0 ? location.search.substring(1) : ""),
        
        //保存数据的对象
        args = {},
        
        //取得每一项
        items = qs.length > 0 ? 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.length){
                args[name] = value;
            }
        }
        return args;
    }

    这儿使用了decodeURIComponent()方法分别解码了name和value,因为查询字符串应该是被编码过的。

    比如当前url是:http://127.0.0.1:8848/test/index.html?q=javascript&number=10,使用:

    var args = getQueryStringArgs();
    console.log(args.q); //javascript
    console.log(args.number); //10

    位置操作

    location.assign()

    setTimeout(function(){
        location.assign('https://www.baidu.com');
    },1000)

    1s后,页面重定向到了baidu。使用window.location或者location.href同样可以达到这个效果,我们常用location.href。

    location对象其它属性

    // 将url 修改为"http://www.wrox.com/WileyCAD/#section1"
    location.hash = "#section1";
    
    // 将url 修改为"http://www.wrox.com/WileyCAD/?q=javascript"
    location.search = "?q=javascript";
    
    // 将url 修改为"http://www.yahoo.com/WileyCAD/"
    location.hostname = "www.yahoo.com";
    
    // 将url 修改为"http://www.yahoo.com/mydir/"
    location.pathname= "mydir";
    
    // 将url 修改为"http://www.yahoo.com:8090/mydir/"
    location.port= 8090;
    location.reload(); // 重新加载(有可能从缓存中加载)
    location.reload(true); // 重新加载(从服务器重新加载)

    location.replace()

    setTimeout(function(){
        location.replace('https://www.baidu.com');
    },1000)

    如上代码,1s后,页面重定向到了baidu,并且页面的后退按钮给禁止了。

    navigator对象

    检查插件

    对于非IE浏览器可以使用navigator.plugins来查看浏览器安装的所有插件,该数组中的每一项都包含如下属性:

    name:插件的名称;

    description:插件的描述;

    filename:插件的文件名;

    length:插件所处理的MIME类型数量

    // 检测插件(在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;
    }
    
    // 检测flash
    console.log(hasPlugin("Flash"));
    // 检测IE中的插件
        function hasIEPlugin(name){
            try{
                new ActiveXObject(name);
                return true;
            }catch(ex){
                return false;
            }
        }
        
        // 检测flash
        alert(hasIEPlugin("ShockwaveFlash.ShockwaveFlash"));

    screen对象

    javascript中有几个对象在编程中用处不大,而screen对象就是其中之一。screen对象基本上只用来表明客户端的能力。

    history对象

    history.go(-1); // 后退一页
    history.go(1); // 前进一页
    history.go(2); // 前进两页
    
    history.back(); // 后退一步
    history.forward(); //前进一步
    
    //确定用户是否一开始就打开了你的页面
    if(history.length == 0) {
        // 这应该是用户打开窗口后的第一个页面
    }
  • 相关阅读:
    十五周学习笔记
    十四周学习笔记
    程序员修炼之道二
    程序员修炼之道
    构建之法十七
    十三周学习笔记总结
    个人课程总结
    构建之法十六
    构建之法十二
    文章单词统计接龙
  • 原文地址:https://www.cnblogs.com/moqiutao/p/10107587.html
Copyright © 2020-2023  润新知