JavaScript概念ECMAScriptDOMBOM什么是BOM?BOM:BrowserObjectModel(浏览器对象模型),BOM提供了一种与内容无关,可以随浏览器窗口滑动的对象结构,是浏览器提供的API。它的主要对象有:window对象:BOM的核心,是js访问浏览器的接口,也是ES指定的Global对象。location对象:提供读取和操作URL信息的属性和方法。即window对象的属性和document对象的属性。文件.location===window.location;//返回truenavigator对象:提供有关浏览器的系统信息。history对象:用于保存浏览器的历史信息。screen对象:用于获取浏览器窗口和屏幕的宽高等信息。窗口对象窗口对象是整个浏览器对象模型的核心,它同时扮演着接口和全局对象的角色。窗口对象提供对以下内容的访问:全局属性//位置信息window.screenLeftwindow.screenTopwindow.screenXwindow.screenY//宽度和高度constouterHeight=window.outerHeight;constouterWidth=window.outerWidth;constinnerHeight=window.innerHeight;constinnerWidth=window.innerWidth;全局方法//位置信息moveBy(x,y)moveTo(x,y)//宽高resizeTo(width,height)resizeBy(width,height)//弹窗alert()confirm()prompt()//计时器consttimeout=setTimeout(callback,delay);//延迟msconstinterval=setInterval(callback,delay);//delayinmsclearTimeout(timeout);clearInterval(interval);//otheropen()onerror()locationobjectlocation.hash返回URL中#后的字符串,不包括#location.hostlocation.hostnamehost包含端口,hostname确实不包含端口location.href返回当前页面的完整URL。我们还可以写入此属性以重定向到新页面。location.pathname在主机名之后返回任何内容location.portlocation.protocollocation.search在?之后返回字符串在URL中,包括?,但被替换的站点从会话历史记录中移除location.reload()这与单击浏览器导航器对象上的重新加载按钮具有相同的效果navigator.userAgentnavigator.language浏览器首选语言navigator.languages返回用户已经存在的数组已知语言,按偏好排序:["en-GB","en-US","en"]navigator.geolocation返回设备的地理位置信息,对象类型navigator.appName返回浏览器名称navigator.appVersion返回到browse浏览器版本navigator.platform返回浏览器平台名称history对象history.length返回一个整数,表示会话历史中元素的数量,包括当前加载的页面,只读。有大小限制,比如chrome下test最大长度为50history.go(integer)history.back(integer)history.forward(integer)history.state返回顶部任意值的副本的历史堆栈。这样就可以查看state值而不用等popstate事件发生再查看history。pushState(object,title,url)object是和state一起保存的对象,title是新页面的标题,url是新的URLreplaceState(object,title,url)和pushState的唯一区别是这个方法替换了历史栈的顶部元素。popstate事件当活动历史条目改变时,将触发popstate事件。注意:调用history.pushState()和history.replaceState()方法不会触发。当用户单击浏览器的前进/后退按钮时触发。当调用history对象的back()、forward()和go()方法时触发。popstate事件的回调函数的参数是事件对象,对象的state属性是和state一起保存的对象。location.href为刷新跳转,刷新时该事件的监听函数失效,所以不会触发popstate事件;同样的,history.go(0)也不会被触发,因为history.go(0)也会直接刷新页面。pushState方法介绍从某种程度上说,调用pushState()与window.location="#foo"基本相同,它们都会在当前文档中创建并激活一条新的历史记录。但是pushState()有以下优点:新的URL可以是任何与当前URL同源的URL。而window.location仅在仅修改散列时才将您保留在同一文档中。如果不想改URL,就不用改(pushState可以设置URL和原来的值一样)。相反,设置window.location="#foo";如果当前散列不是散列形式#foo,则只会创建一个新的历史条目。任何数据都可以关联到新的历史记录中。window.location="#foo"形式的操作,可以只将需要的数据写入锚点的字符串中。直接给location赋值相当于给location.href赋值。注意:pushState()不会触发hashchange事件,即使新的URL与之前的URL仅在哈希值上不同。浏览器在调用pushState()后不会尝试加载此URL(即不会触发重新加载),但可能会稍后尝试加载URL,例如在用户重新启动浏览器后。设置window.location='?page=1'会立即触发页面刷新,但是设置pushState的url参数为'?page=1'不会立即触发页面刷新。pushState()不能在不同来源的URL之间跳转
