资讯专栏INFORMATION COLUMN

js中的bom对象

dailybird / 1784人阅读

摘要:在浏览器中,对象有双重角色,它既是通过访问浏览器窗口的一个接口,又是规定的对象。在集合中,可以通过数值索引从开始,从左至右,从上到下或者框架名称来访问相应的对象。

ECMAScript 是JavaScript 的核心,但如果要在Web 中使用JavaScript,那么BOM(浏览器对象模
型)则无疑才是真正的核心。BOM 提供了很多对象,用于访问浏览器的功能,这些功能与任
何网页内容无关.

window对象

BOM 的核心对象是window,它表示浏览器的一个实例。在浏览器中,window 对象有双重角色,
它既是通过JavaScript 访问浏览器窗口的一个接口,又是ECMAScript 规定的Global 对象。这意味着
在网页中定义的任何一个对象变量函数,都以window 作为其Global 对象

全局作用域

由于 window 对象同时扮演着ECMAScript 中Global 对象的角色,因此所有在全局作用域中声明
的变量、函数都会变成window 对象的属性和方法

</>复制代码

  1. var age = 29;
  2. function sayAge(){
  3. alert(this.age);
  4. }
  5. alert(window.age); //29
  6. sayAge(); //29
  7. window.sayAge(); //29

全局变量不能通过delete 操作符删除,而直接在window 对象上的定义的属性可以

</>复制代码

  1. var age = 29;
  2. window.color = "red";
  3. //在IE < 9 时抛出错误,在其他所有浏览器中都返回false
  4. delete window.age;
  5. //在IE < 9 时抛出错误,在其他所有浏览器中都返回true
  6. delete window.color; //returns true
  7. alert(window.age); //29
  8. alert(window.color); //undefined

尝试访问未声明的变量会抛出错误,但是通过查询window 对象,可以知道某个可能未声明的变量是否存在

</>复制代码

  1. //这里会抛出错误,因为oldValue 未定义
  2. var newValue = oldValue;
  3. //这里不会抛出错误,因为这是一次属性查询
  4. //newValue 的值是undefined
  5. var newValue = window.oldValue;
窗口关系及框架

如果页面中包含框架,则每个框架都拥有自己的window 对象,并且保存在frames 集合中。在frames
集合中,可以通过数值索引(从0 开始,从左至右,从上到下)或者框架名称来访问相应的window 对
象。每个window 对象都有一个name 属性,其中包含框架的名称

</>复制代码

  1. <span class="hljs-attr">Frameset</span> <span class="hljs-string">Example</span>

以上代码创建了一个框架集,其中一个框架居上,两个框架居下。对这个例子而言,可以通过
window.frames[0]或者window.frames["topFrame"]来引用上方的框架。不过,恐怕你最好使用
top 而非window 来引用这些框架(例如,通过top.frames[0]),top 对象始终指向最高(最外)层的框架,也就是浏览器窗口,与top相对的是parent,parent指向的是父框架

窗口位置

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

</>复制代码

  1. var leftPos = (typeof window.screenLeft == "number") ?
  2. window.screenLeft : window.screenX;
  3. var topPos = (typeof window.screenTop == "number") ?
  4. window.screenTop : window.screenY;
系统对话框

系统对话框有三个,分别为:alert,confirm,prompt.
alert为系统提示框

</>复制代码

  1. alert("nice to meet you");

confirm为确认框

</>复制代码

  1. var sure = confirm("are you have a good time ?");
  2. if(sure){
  3. alert("yes, you have a good time !");
  4. }

prompt为系统输入框

</>复制代码

  1. var getname = prompt("what"s you name ?","name");//参数1为提示语, 参数2为默认字符.
  2. alert(getname);
间歇调用和超时调用

间歇调用使用setTimeout方法,超时调用使用setInterval方法
这两个方法都有两个参数,第一个参数为执行的代码或函数,第二个参数为执行时间.
当然这两种调用也有对应的方法来清除调用.

</>复制代码

  1. setTimeout(function(){ alert("good morning!"); },1000); //一秒后弹出弹框.
  2. var count = 0;
  3. var interval = setInterval(function(){
  4. count++;
  5. if(count > 10){
  6. clearInterval(interval); //清除间歇调用
  7. }
  8. },1000);

setInterval有个不足之处是后一个间歇调用可能会在前一个间歇调用结束之前启动,因此使用setTimeout来模拟setInterval是不错的选择.

</>复制代码

  1. var count = 0;
  2. function doSoming(){
  3. count ++;
  4. if(count<=10){
  5. setTimeout(doSoming,1000);
  6. }
  7. }
  8. setTimeout(doSoming,1000);
获取窗口大小

通过以下代码可以跨浏览器获取页面视口大小

</>复制代码

  1. var pageWidth = window.innerWidth,
  2. pageHeight = window.innerHeight;
  3. if(typeof pageWidth !="number"){
  4. if (document.compatMode == "CSS1Compat"){
  5. pageWidth = document.documentElement.clientWidth;
  6. pageHeight = document.documentElement.clientHeight;
  7. }
  8. else {
  9. pageWidth = document.body.clientWidth;
  10. pageHeight = document.body.clientHeight;
  11. }
  12. }
location对象

location 是最有用的BOM对象之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能
以下是location对象的属性列表.

hash 返回URL中的hash(#号后跟零或多个字符),如果URL中不包含散列,则返回空字符串,例"#contents"

host 返回服务器名称和端口号(如果有).例"www.zhaosywz.com:80"

hostname 返回不带端口号的服务器名称.例"www.zhaosywz.com"

href 返回当前页面的完整url.例"www.zhaosywz.com/index.html"

pathname 返回url中的目录或文件名,例"/category/shoes"

port 返回url的端口号,如果没有则返回空字符串.例"8080"

protocol 返回页面使用的协议。通常是http:或https:

search 返回URL的查询字符串。这个字符串以问号开头,"?id=100"

尽管"search"属性可以返回查询字符串,但为了更加方便的访问其参数,可以通过下面的代码将其转化为包含参数的对象.

</>复制代码

  1. function getQueryStringArgs(){
  2. //取得查询字符串并去掉开头的问号
  3. var qs = (location.search.length > 0 ? location.search.substring(1) : ""),
  4. //保存数据的对象
  5. args = {},
  6. //取得每一项
  7. items = qs.length ? qs.split("&") : [],
  8. item = null,
  9. name = null,
  10. value = null,
  11. //for 循环中使用
  12. i = 0,
  13. len = items.length;
  14. //逐个将每一项添加到args 对象中
  15. for (i=0; i < len; i++){
  16. item = items[i].split("=");
  17. name = decodeURIComponent(item[0]);
  18. value = decodeURIComponent(item[1]);
  19. if (name.length) {
  20. args[name] = value;
  21. }
  22. }
  23. return args;
  24. }

通过以下任何一种方式都会导致页面的跳转或重载

</>复制代码

  1. location.href = "http://www.baidu.com";

</>复制代码

  1. location.hash = "#section1";

</>复制代码

  1. location.search = "?q=javascript";

</>复制代码

  1. location.hostname = "www.yahoo.com";

</>复制代码

  1. location.pathname = "mydir";

</>复制代码

  1. location.port = 8080;

通过reload()可以重新加载当前页面

</>复制代码

  1. location.reload(); //重新加载(有可能从缓存中加载)
  2. location.reload(true);//重新加载(直接从服务器加载)
navigator对象

最早由 Netscape Navigator 2.0 引入的navigator 对象,现在已经成为识别客户端浏览器的事实标准,navigator有以下跨浏览器属性和方法.

appCodeName 浏览器的名称。通常都是Mozilla,即使在非Mozilla浏览器中也是如此

appName 完整的浏览器名称

appVersion 浏览器版本,一般不与实际的浏览器版本对应.

cookieEnabled 表示cookie是否启用

javaEnabled() 表示单签浏览器是否启用Java

onLine 表示浏览器是否连接到了因特网

mimeTypes 在浏览器中注册的MIME类型数组

platform 浏览器的系统平台

plugins 浏览器中安装的插件信息的数组

userAgent 浏览器用户代理字符串
userAgent是最常用的属性.

插件检测

</>复制代码

  1. //检测插件(在IE 中无效)
  2. function hasPlugin(name){
  3. name = name.toLowerCase();
  4. for (var i=0; i < navigator.plugins.length; i++){
  5. if (navigator. plugins [i].name.toLowerCase().indexOf(name) > -1){
  6. return true;
  7. }
  8. }
  9. return false;
  10. }
  11. //检测Flash
  12. alert(hasPlugin("Flash"));

</>复制代码

  1. //检测IE 中的插件
  2. function hasIEPlugin(name){
  3. try {
  4. new ActiveXObject(name);
  5. return true;
  6. } catch (ex){
  7. return false;
  8. }
  9. }
  10. //检测Flash
  11. alert(hasIEPlugin("ShockwaveFlash.ShockwaveFlash"));
history对象

history 对象保存着用户上网的历史记录,从窗口被打开的那一刻算起。

</>复制代码

  1. //后退一页
  2. history.go(-1);
  3. //前进一页
  4. history.go(1);
  5. //前进两页
  6. history.go(2);
  7. //跳转到最近的包含"wrox.com"字符的页面
  8. history.go("wrox.com");
  9. //后退一页
  10. history.back();
  11. //前进一页
  12. history.forward();
  13. if (history.length == 0){
  14. //这应该是用户打开窗口后的第一个页面
  15. }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86096.html

相关文章

  • 简简单单认识js里的Bom对象

    摘要:里面的对象是什么是浏览器对象,全拼为都有什么对象是中的顶级对象,所有定义在全局作用域中的变量函数都会变成对象的属性和方法,在调用的时候可以省略。 js里面的Bom对象 showImg(https://segmentfault.com/img/remote/1460000010691602); Bom是什么? Bom是浏览器对象,全拼为Browser Object Model Bom都有...

    CoffeX 评论0 收藏0
  • JS系列之BOM

    摘要:顾名思义,父对象始终指向当前框架的直接上层框架。与框架有关的最后一个对象是,它始终指向实际上,和对象可以互换使用。同时,这也意味着可以将不同层次的对象连缀起来,例如。对象就是判断用户的浏览器以及操作系统。 BOM BOM Browser Object Model, 浏览器对象模型showImg(https://segmentfault.com/img/bVbjS3b?w=663&h=4...

    edagarli 评论0 收藏0
  • bom基础

    摘要:里面的对象什么是是浏览器对象,全拼为浏览器对象模型是的缩写,简称浏览器对象模型提供了独立于内容而与浏览器窗口进行交互的对象由于主要用于管理窗口与窗口之间的通讯,因此其核心对象是由一系列相关的对象构成,并且每个对象都提供了很多方法与属性缺乏标 js里面的Bom对象 什么是Bom Bom是浏览器对象,全拼为(Browser Object Model)浏览器对象模型 BOM是browser...

    shusen 评论0 收藏0
  • js中的BOM对象

    摘要:浏览器对象模型以对象为依托,表示浏览器窗口以及页面可见区域。同时,对象还是中的对象,因而所有全局变量和函数都是它的属性,且所有原生的构造函数及其他函数也都存在于它的命名空间下。本章讨论了下列的组成部分。 浏览器对象模型(BOM)以 window 对象为依托,表示浏览器窗口以及页面可见区域。同时, window对象还是 ECMAScript 中的 Global 对象,因而所有全局变量和函...

    894974231 评论0 收藏0
  • js bom location对象

    摘要:一对象获取获取服务器名称和端口号获取服务器名称和端口号获取服务器名称和端口号获取不带端口号的服务器名称获取不带端口号的服务器名称获取整个获取整个返回中的目录和或文件名返回中的目录和或文件名返回的端口号返回的端口号返回的协议返回的协议返回的查 一、location对象 http://localhost:8881/javascript/BOM/window.html?name=bob&ag...

    Carson 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<