BOM介绍

目录

前言

一、window对象

1、Global作用域

二、window窗口

1、窗口位置

screenLeft 和 screenTop

screenX 和 screenY

pageXOffset

pageYOffset

2、窗口大小

innerWidth

innerHeight

outerWidth

outerHeight

3、screen对象

screen.width 和 screen.height

screen.availWidth 和 screen.availHeight

screen.colorDepth

screen.pixelDepth

三、Window.open()

四、系统对话框

alert()

confirm()

prompt()

 五、location对象

属性

host

hostname

href

pathname

port

protocol

search

方法

assign()

replace()

reload()

六、history对象

length

back()

forward()

go()

七、间歇调用和超时调用

setTimeout()

setInterval()


前言

虽然 ECMAScript 把浏览器对象模型(BOM,Browser Object Model)描述为JavaScript 的核心,但实际上 BOM 是使用 JavaScript 开发 Web 应用程序的核心。BOM 提供了与网页无关的浏览器功能对象。多年来,BOM 是在缺乏规范的背景下发展起来的,因此既充满乐趣又问题多多。毕竟,浏览器开发商都按照自己的意愿来为它添砖加瓦。最终,浏览器实现之间共通的部分成为了事实标准,为 Web 开发提供了浏览器间互操作的基础。HTML5 规范中有一部分涵盖了 BOM 的主要内容,因为 W3C 希望将JavaScript 在浏览器中最基础的部分标准化。

一、window对象

BOM 的核心是 window 对象,表示浏览器的实例。window 对象在浏览器中有两重身份,一个是ECMAScript 中的 Global 对象,另一个就是浏览器窗口的 JavaScript 接口。这意味着网页中定义的所有对象、变量和函数都以 window 作为其 Global 对象,都可以访问其上定义全局方法。

1、Global作用域

因为 window 对象被复用为 ECMAScript 的 Global 对象,所以通过 var 声明的所有全局变量和函数都会变成 window 对象的属性和方法。比如:

<body>
  <script>
    var aname = 'zhangsan';
    var asayName = function () {
      console.log(this.aname);
    }
    console.log(window.aname); //zhangsan
    asayName();  //zhangsan
    window.asayName(); //zhangsan
    console.log(this); //window
  </script>
</body>

 这里,变量 aname 和函数 asayName()被定义在全局作用域中,它们自动成为了 window 对象的成员。因此,变量 name 可以通过 window.name 来访问,而函数 sayName()也可以通过 window.sayName()来访问。因为 sayName()存在于全局作用域,this.name 映射到 window.aname,所以就可以显示正确的结果了。

二、window窗口

1、窗口位置

screenLeft 和 screenTop

属性返回窗口相对于屏幕的X和Y坐标

screenX 和 screenY

属性返回窗口相对于屏幕的X和Y坐标

pageXOffset

设置或返回当前页面相对于窗口显示区左上角的 X 位置

pageYOffset

设置或返回当前页面相对于窗口显示区左上角的 Y 位置

<script>
    console.log(window.screenLeft, window.screenTop);
    console.log(window.screenX, window.screenY);
    console.log(window.pageXOffset, window.pageYOffset);
</script>

2、窗口大小

innerWidth

页面视图区的宽度

innerHeight

页面视图区的高度

outerWidth

浏览器窗口的宽度

outerHeight

浏览器窗口的高度

<script>
    console.log(window.innerWidth, window.innerHeight);
    console.log(window.outerWidth, window.outerHeight);
</script>

浏览器窗口是整个图片的范围,页面视图区是红色框部分: 

3、screen对象

screen.width 和 screen.height

屏幕总宽度/高度(像素单位)

screen.availWidth 和 screen.availHeight

可用宽度/高度(像素单位)

screen.colorDepth

颜色深度

screen.pixelDepth

颜色分辨率

三、Window.open()

window.open()方法可以用于导航到指定 URL,也可以用于打开新浏览器窗口。这个方法接收 4个参数:要加载的 URL、目标窗口、特性字符串和表示新窗口在浏览器历史记录中是否替代当前加载页面的布尔值。通常,调用这个方法时只传前 3 个参数,最后一个参数只有在不打开新窗口时才会使用。

语法:

window.open(URL,name,specs,replace)

参数:

URL

可选。打开指定的页面的URL。如果没有指定URL,打开一个新的空白窗口。

name

可选。指定target属性或窗口的名称。支持以下值:

  • _blank     URL加载到一个新的窗口。这是默认值

  • _parent    URL加载到父框架

  • _self         URL替换当前页面

  • _top          URL替换任何可加载的框架集

  • name        窗口名称

specs

可选。一个逗号分隔的项目列表。支持以下值:

hannelmode=yes|no|1|0是否要在影院模式显示 window。默认是没有的。仅限IE浏览器
directories=yes|no|1|0是否添加目录按钮。默认是肯定的。仅限IE浏览器
fullscreen=yes|no|1|0浏览器是否显示全屏模式。默认是没有的。在全屏模式下的 window,还必须在影院模式。仅限IE浏览器
height=pixels窗口的高度。最小值为100
left=pixels该窗口的左侧位置
location=yes|no|1|0是否显示地址字段。默认值是yes
menubar=yes|no|1|0是否显示菜单栏。默认值是yes
resizable=yes|no|1|0是否可调整窗口大小。默认值是yes
scrollbars=yes|no|1|0是否显示滚动条。默认值是yes
status=yes|no|1|0是否要添加一个状态栏。默认值是yes
titlebar=yes|no|1|0是否显示标题栏被忽略,除非调用HTML应用程序或一个值得信赖的对话框.默认值是yes
toolbar=yes|no|1|0是否显示浏览器工具栏。默认值是yes
top=pixels窗口顶部的位置。仅限IE浏览器
width=pixels窗口的宽度。最小值为100

replace

Optional.Specifies规定了装载到窗口的 URL 是在窗口的浏览历史中创建一个新条目,还是替换浏览历史中的当前条目。支持下面的值:

  • true     URL 替换浏览历史中的当前条目。

  • false    URL 在浏览历史中创建新的条目。

<body>
  <button onclick="openWindow()">打开新窗口</button>
  <button onclick="closeWindow()">关闭窗口</button>
  <script>
    function openWindow() {
      // 设置一个全局变量接收新窗口的打开
      w = window.open('https://www.baidu.com', '_blank', 'width=600,height=600', 'false');
      // 调整窗口大小 浏览器窗口的新高度和新宽度
      w.resizeTo(400, 400);
      // 移动窗体 接受的是新位置的x和y坐标值
      w.moveTo(100, 150);
    }

    function closeWindow() {
      // 关闭窗口
      w.close()
    }
  </script>
</body>

四、系统对话框

使用 alert()、confirm()和 prompt()方法,可以让浏览器调用系统对话框向用户显示消息。这些对话框与浏览器中显示的网页无关,而且也不包含 HTML。它们的外观由操作系统或者浏览器决定,无法使用 CSS 设置。此外,这些对话框都是同步的模态对话框,即在它们显示的时候,代码会停止执行,在它们消失以后,代码才会恢复执行

alert()

alert()接收一个要显示给用户的字符串。与 console.log 可以接收任意数量的参数且能一次性打印这些参数不同,alert()只接收一个参数。调用 alert()时,传入的字符串会显示在一个系统对话框中。对话框只有一个“OK”(确定)按钮。如果传给 alert()的参数不是一个原始字符串,则会调用这个值的 toString()方法将其转换为字符串。

警告框(alert)通常用于向用户显示一些他们无法控制的消息,比如报错。用户唯一的选择就是在看到警告框之后把它关闭。

<script>
    alert('我是警告框')
</script>

confirm()

确认框通过调用 confirm()来显示。确认框跟警告框类似,都会向用户显示消息。但不同之处在于,确认框有两个按钮:“Cancel”(取消)和“OK”(确定)。用户通过单击不同的按钮表明希望接下来执行什么操作。比如,confirm("你确定吗?");

要知道用户单击了 OK 按钮还是 Cancel 按钮,可以判断 confirm()方法的返回值:true 表示单击了 OK 按钮,false 表示单击了 Cancel 按钮或者通过单击某一角上的 X 图标关闭了确认框。

<script>
    var res = confirm('确定删除吗?')
    // console.log(res);
    if (res) {
      console.log('点击了确认按钮');
    }else{
      console.log('点击了取消按钮');
    }
</script>

prompt()

提示框,通过调用 prompt()方法来显示。提示框的用途是提示用户输入消息。除了 OK 和 Cancel 按钮,提示框还会显示一个文本框,让用户输入内容。prompt()方法接收两个参数:要显示给用户的文本,以及文本框的默认值(可以是空字符串)。调用 prompt("你叫什么名字?"),如果用户单击了 OK 按钮,则 prompt()会返回文本框中的值。如果用户单击了 Cancel 按钮,或者对话框被关闭,则 prompt()会返回 null

<script>
    var res = prompt('请输入姓名:')
    // console.log(res);
    if (res) {
      console.log(res);
    }else{
      console.log('点击了取消按钮');
    }
</script>

 五、location对象

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

location是个神奇的对象,既是window的对象也是document的对象。经过我们的对比发现,直接使用location对象也可以。

<script>
  console.log(window.location === document.location); //true
  console.log(location === document.location);	//true
  console.log(location === window.location);	//true
</script>

属性

host

返回服务器名称和端口号

hostname

返回不带端口号的服务器名称

href

返回当前加载页面的完整URL

pathname

返回URL的目录和文件名

port

返回URL中指定的端口号

protocol

返回页面使用的协议

返回URL的查询字符串。这个字符串以问号开头

<script>
    console.log(location.host);
    console.log(location.hostname);
    console.log(location.href);
    console.log(location.hopathnamest);
    console.log(location.port);
    console.log(location.protocol);
    console.log(location.search);
</script>

方法

assign()

传递一个url参数,打开新url,并在浏览记录中生成一条记录

replace()

参数为一个url,结果会导致浏览器位置改变,但不会在历史记录中生成新记录

reload()

重新加载当前显示的页面,参数可以为boolean类型,默认为false,表示以最有效方式重新加载,可能从缓存中直接加载。如果参数为true,强制从服务器中重新加载。

<button>跳转页面</button>
<button>替换页面</button>
<button>刷新页面</button>
<script>
  var btn = document.getElementsByTagName('button');
  btn[0].onclick = function () {
    location.assign('./test2.html')
  }
  btn[1].onclick = function () {
    location.replace('./test2.html')
  }
  btn[2].onclick = function () {
    location.reload()
  }
</script>

六、history对象

该对象保存着用户上网的历史记录。出于安全方面的考虑,开发人员无法得知用户浏览过的URL,不过借由用户访问过的页面列表,同样可以在不知道实际URL的情况下实现后退前进,注意: 没有应用于History对象的公开标准,不过所有浏览器都支持该对象。

length

返回历史列表中的网址数。注意:Internet Explorer和Opera从0开始,而Firefox、Chrome和Safari从1开始。

back()

加载 history 列表中的前一个 URL

forward()

加载 history 列表中的下一个 URL

go()

加载 history 列表中的某个具体页面,负数表示向后跳转,正数表示向前跳转。

<body>
  <button>跳转页面</button>
  <button>替换页面</button>
  <button>刷新页面</button>
  <button>上一页</button>
  <button>下一页</button>
  <script>
    var btns = document.getElementsByTagName('button')
    // 跳转页面
    btns[0].onclick = function () {
      location.assign('./test2.html')
    }
    // 替换页面
    btns[1].onclick = function () {
      location.replace('./test2.html')
    }
    // 刷新页面
    btns[2].onclick = function () {
      location.reload()
    }
    // 上一页
    btns[3].onclick = function () {
      history.back()
    }
    // 下一页
    btns[4].onclick = function () {
      history.forward()
    }
  </script>
</body>

七、间歇调用和超时调用

javascript是单线程语言,但是可以通过超时值和间歇时间来调度代码在特定时刻执行。

setTimeout()

该方法返回一个数值ID,表示超时调用,这个超时调用ID是计划执行代码的唯一标识符通过它来取消超时调用。可以通过clearTimeout(ID);

参数:

1、要执行的代码

2、以毫秒表示的时间。

例如:在1秒后执行输出语句

<script>
  var id = setTimeout(() => {
    console.log('Hello World');
  }, 1000);
  console.log(id);
  // 清除超时调用
  clearTimeout(id);
</script>

setInterval()

按照指定的时间间隔重复执行代码,直到间歇调用被取消或页面被卸载。调用该方法也会返回一个间歇调用ID,该ID可以用户在将来某个时刻取消间歇调用。

参数:

1、要执行的代码

2、以毫秒表示的时间。

如动态显示时间:

<script>
  var div = document.createElement('div');
  // 间歇调用
  var id = setInterval(() => {
    div.innerHTML = new Date().toLocaleString();
  }, 1000);
  document.body.appendChild(div);
  // 清除计时器
  clearInterval(id);
</script>

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值