JS基础——BOM

JS = ES + BOM + DOM,其中ES是JS的核心。

所谓的BOM即 浏览器对象模型(Browser Object Model)。BOM赋予了JS操作浏览器的能力,即window操作。

DOM则用于创建删除节点,操作HTML文档

BOM的知识点大致可以分为五个对象去讨论:window对象,location对象,navigator对象,sccreen对象,history对象。

这个五个对象会提供一些方法和api,现阶段我们需要去了解的就是这些对象放出的来的方法有哪些,是什么作用。

一、widow对象(BOM最核心的对象)

window对象,表示浏览器的一个实例。

1、全局作用域:

  1. 在网页中,Window == Global
  2. 全局变量不能被delete销毁,但是window中定义的定义是属性是可以通过delete销毁的。
    var age = 9;
    window.color = "red";
    
    delete window.age;    //返回false
    delete window.color;    //true
  3. 尝试访问未声明的变量会抛出错误,但查询window对象可以知道某个属性是否存在

    var newValue = oldValue;    //抛出错误,因为oldValue没有定义
    var newValue = window.oldValue;    //不会抛出错误,因为这是一次window的属性查询,
                                       //这里newValue的值为undefined
    

2、窗口关系框架:frame、frames[]、window、top、parent、self、moveTo()、moveBy()

 每个框架都包含自己的构造函数,如 :

top.Object != top.frames[0];

 3、窗口位置:screenLeft、screenTop、screenX、screenY

Chrome、Safari、Opera:screenLeft、screenRight
Firefox:screenX、screenY

 4、窗口大小:outerHeight、outerWidth、innerHeight、innerWidth

上面四个值,Chrome返回的都是相同的值——视口(viewport)大小而非浏览器窗口大小
                        Firefox、Opera、Safari返回不同的值(即分别为浏览器窗口大小、视口大小)。

document.documentElement.clientWidth
document.documentElement.clientHeight
这两个值Chrome、Firefox、Opera均返回视口信息。

resizeTo()、resizeBy()
这两个方法可能会被浏览器禁用

5、导航和打开窗口    window.open(*1,*2,*3,*4)

(1)、window.open(“url”,traget,“设置值”,false/true)

  • 一般只需要传递第一个参数。
  • 第一个参数是打开的新窗口位置,如果第二个参数 target值为已经存在的窗口或框架的名字,那么就在该窗口下面加载第一个url。
  • 第三个参数是打开的新页面的设置值。
    window.open("https://www.wrox.com/","wroxwindow",
                "height=400,width=400,top=10,left=10,resizable=yes");
    设置说明
    height数值不能小于100
    width数值不能小于100
    top数值不能是负值
    left数值不能是负值
    locationyes/no地址栏,不同浏览器默认值不同
    menubaryes/no

    显示菜单栏,默认no

    resizableyes/no是否可改变大小,默认no
    scrollbarsyes/no是否允许滚动,默认no
    statusyes/no显示状态栏,默认no
    toolbaryes/no显示工具栏,默认no
  • 第四个参数,只有在不打开新窗口情况下使用——表示新页面是否取代浏览器历史记录中当前加载页面的布尔值。

(2)、window.opener()、newWindowName.close()

 弹出窗口有一个opener属性,保存着打开它的原始窗口对象。(这个属性只在弹出窗口的最外层window对象(top)中有定义)

 虽然弹出窗口有这么一个指针指向打开它的原始窗口,但是原始窗口并没有这样的指针指向弹出窗口。
窗口并不跟踪记录它们打开的窗口,因此我们要在必要时手动实现跟踪。

有些浏览器的不同的标签页是在独立的进程中运行——Chrome,当一个标签页打开另一个标签页时,它们如果需要通信,就不能运行在独立的进程中。
如果要运行在独立的进程中,就要新创建的标签页的opener属性设置为null:

window.open("https://www.wrox.com/","wroxWindow",
            "height=400,width=400,top=10,left=10,resizable=yes");
wroxWindow.opener = null;

 (3)、安全限制和弹出窗口屏蔽程序

  • 浏览器内置的屏蔽程序阻止的弹出窗口,那么window.open()返回的值为null
  • 浏览器扩展程序、或其他程序阻止的弹出窗口,那么window.open()通常抛出一个错误
//想要准确地检测弹出窗口是否被屏蔽,必须检测返回值的同时,将window.open()放在try-catch块中
var blocked = false;

try{
    var wroxWin = window.open("http://www.wrox.com","_blank");
    if(wroxWin == null){
        blocked = true;
    }
}catch(ex){
    blocked = true;
}

if(blocked){
    alert("The popup was blocked!");
}

 6、超时调用和间歇调用:setTimeOut(,)、setInterval(,)

 超时调用:setTimeout(),接收两个参数——第一个为要运行的代码,第二个为经过多少时间将代码添加到JavaScript的执行队列中去。

间歇调用:setInterval(),同上,但是这个方法的函数会不断循环执行,直到页面被卸载。(一般不建议使用简写调用,因为间歇调用可以用setTimeout()代替,并有更好的效果)

var num = 0;
var max = 10;

function incrementNumber(){
    num++;

    //如果执行次数未达到max设定的值,则设置为一次超时调用
    if(num < max){
        setTimeout(incrementNumber,500);
    }else{
        alert("Done");
    }
}

setTimeout(incrementNumber,500);

7、系统对话框:alert()、confirm()、prompt() 

 前两个对话框不赘述,很常见。

第三个对话框,是一个“提示”框,用于提示用户输入一些文本,提示对话框除了显示OK和Cancel按钮之外,还要显示一个文本输入域,乙供用户在其中输入内容。

prompt()方法接受两个参数:要显示给用户的文本提示文本输入域的默认值

prompt()方法返回用户在文本输入域中输入的值。如果没有输入,则返回null。

 二、location对象(BOM最有用的对象

提供当前窗口中加载的文档有关信息

window.location === document.location

location所有属性:

属性名例子说明
hash“contents”返回URL中的hash
host“www.wrox.com:80”返回服务器名称和端口号
hostname“www.wrox.com”返回不带端口号的服务器名称

href

"https://www.wrox.com"返回当前加载页面的完整URL。
location的toString()方法也返回这个值
pathname“/WileyCDA/”返回URL中的目录和(或)文件名
port“8080”返回URL中指定的端口号。
如果URL不包含端口号,则返回空字符串。
protocol“https://”返回页面使用的协议。一般为http:或https:
search"?q=javascript"返回URL查询字符串。这个字符串以问好开头。

 1、查询字符串参数:location.search()

function getQueryStringArgs(){
    //取得查询字符串并去掉开头的问号
    var qs = (location.search.length >0 ? location.search.substring(1):"",
        args = {},    //保存数据的对象
        items = qs.length ? qs.split("&") :[],    //取得每一项
        item = null,
        name = null,
        value = null,
        i = 0,
        len = items.length;

    //逐个将每一项添加到args对象中
    for(i=0;i<lem;i++){
        item = items[i].split("=");
        name = decodeURIComponent(item[0]);
        value = decodeURIComponent(item[1]);

        if(name.length){
            args[name] = value;
        }
    }

    return args;
}

 2、位置操作:

这三个的结果是一样的,都是在改变浏览器的位置:

  • location.assign("url")
  • location.href = "url";
  • window.location = "url";

(1)修改location的属性值——location.hash ="..",location.search =“..”等。

(2)禁用前进、后退行为:window.replace(“url")。
          因为通过第一种方式修改以后,会在浏览器的历史记录中生成一条新纪录,用户可以通过单
          击“后退”按钮导航到前一个页面。
          使用replace()后,结果虽然会导致浏览器位置改变,但是不会再历史记录中生成新记录。用
          户不能回到前一个页面。

(4)reload()

三、navigator对象

1、检测插件:navigator.plugins[i]、navigator.hasPlugin("name")

navigator.plugins[i]数组中每个项包含四个属性:

  • name:插件的名字
  • description:插件的描述
  • filename:插件的文件名
  • length:插件所处理的MIME类型数量

2、处理注册程序:registerContentHandler()、registerProtocolHandler()

 这两个方法可以让一个站点指明它可以处理特定类型的信息。

  • registerContentHandler()接收三个参数:要处理的MIME类型、可以处理该MIME类型的页面的URL、应用程序的名称。
  • registerProtocolHandler()接收三个参数:要处理的协议、处理该协议的页面的URL、应用程序的名称。

三、screen对象

在编程中用处不大。

其中包括了浏览器窗口外部的显示器信息,如像素宽度、高度等。

四、history对象

历史记录。

history.go(-1);    //负为后退,正为前进

history.forward();
history.back();

history.length();    //保存着历史记录的数量
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值