BOM介绍

文章目录

    • 1、简介
      • 主要作用
    • 2、BOM的组成
      • 2.1 窗口对象window
        • 2.1.1 window对象特点
        • 2.1.2 window作用域
        • 2.1.3 window对象常见方法
          • **第一类:系统对话框**
          • 第二类:控制浏览器窗口方法
          • 第三类:与定时器有关的方法

1、简介

BOM(Browser Object Model),全称浏览器对象模型。 BOM 是使用 JavaScript 开发 Web 应用程序的核心。BOM 提供了与网页无关的浏览器功能对象,是用于描述这种对象与对象之间层次关系的模型,==浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。==BOM由多个对象组成,其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对象(例如screen对象、history对象等)都是该对象的子对象。

BOM 是在缺乏规范的背景下发展起来的,因此既充满乐趣又问题多多。毕竟,浏览器开发商都按照自己的意愿来为它添砖加瓦。最终,浏览器实现之间共通的部分成为了事实标准,为 Web 开发提供了浏览器间互操作的基础。HTML5 规范中有一部分涵盖了 BOM 的主要内容,因为 W3C 希望将JavaScript 在浏览器中最基础的部分标准化。

主要作用

  1. 弹出新浏览器窗口的能力;
  2. 移动、关闭和更改浏览器窗口大小的能力;
  3. 可提供WEB浏览器详细信息的导航对象;
  4. 可提供浏览器载入页面详细信息的本地对象;
  5. 可提供用户屏幕分辨率详细信息的屏幕对象;
  6. 支持Cookies;

2、BOM的组成

BOM中共有五大对象

  • Window:窗口对象
  • Navigator:浏览器对象
  • Screen:显示器屏幕对象
  • Histroy:历史记录对象
  • Location:地址栏对象

2.1 窗口对象window

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

2.1.1 window对象特点

window对象不需要创建可以直接使用,window.方法名();,甚至可以把window直接省略方法名();

window.alert("hello window");
//等于下面的
alert("hello window");
2.1.2 window作用域

通常node环境下的全局作用域为global,浏览器的全局作用域为window,而window对象又会被复用为ECMAScript的Global对象,所以可以通过var声明的所有全局变量和函数都会变成window对象的属性和方法。比如:

<script>
    var name = 'zhangsan';
    var sayName = function () {
    console.log(this.name); //zhangsan
    }
    console.log(name);//zhangsan
    console.log(window.name); //zhangsan
    sayName();  //zhangsan
    window.sayName(); //zhangsan
</script>

上段代码我们使用var声明全局变量和全局方法,然后使用window对象调用它们,这说明我们声明的这些变量和方法全都挂载到了window对象上去了。

需要注意的是:

如果我们使用let或者const声明方法时,该方法不会挂载到window对象上去,比如下列代码会报错:

<script>
    let name1 = '张三';
    let sayName1 = function () {
        console.log(this.name); // 张三
    }
    console.log(name1);// 张三
    console.log(window.name1); // 张三
    sayName1();  // 张三
    window.sayName1(); // 错误:window.sayName1 is not a function
</script>

细心的小伙伴应该也发现了,我们声明的全局变量可以不适用window.say的形式调用,可以省略window,因为window是全局作用域,变量或方法找不到的时候自然要去window上找,所以我们挂载到window对象上的方法或变量通常可以直接调用,而不需要window.。

2.1.3 window对象常见方法
第一类:系统对话框

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

  • alert()方法

    alert()接收一个要显示给用户的字符串。

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

    <script>
        alert("你确定吗?");
    </script>
    

    在这里插入图片描述

  • confirm()方法

    确认框通过调用 confirm()来显示。确认框跟警告框类似,都会向用户显示消息。但不同之处在于,确认框有两个按钮:“Cancel”(取消)和“OK”(确定)。想知道用户单击了 OK 按钮还是 Cancel 按钮,可以判断 confirm()方法的返回值:true 表示单击了 OK 按钮,false 表示单击了 Cancel 按钮。

    <script>
        var result = confirm('你确定吗?');
        if (result) {
            console.log('确定');
        }else{
            console.log('取消');
        }
    </script>
    

    在这里插入图片描述

    选择确定或者取消按钮会在控制台输出结果:

    在这里插入图片描述

  • prompt()方法

    提示框,通过调用 prompt()方法来显示。提示框的用途是提示用户输入消息。除了 OK 和 Cancel 按钮,提示框还会显示一个文本框,让用户输入内容。prompt()方法接收两个参数:要显示给用户的文本,以及文本框的默认值(可以是空字符串)。

    <script>
        var result = prompt("你叫什么名字?");
        if (result) {
            console.log(result);
        }else{
            console.log('取消');
        }
    </script>
    

    往输入框输入“张三”会在控制台输出

第二类:控制浏览器窗口方法
  • open()方法

    基本语法:window.open(URL,name,specs)

    这个方法可以接收 3个参数:要加载的 URL、目标窗口、特性字符串。

    参数介绍:

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

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

      1. _blank - URL加载到一个新的窗口。这是默认。
      2. _parent - URL加载到父框架
      3. _self - URL替换当前页面
      4. _top - URL替换任何可加载的框架集
      5. name - 窗口名称
    • specs:可选。一个逗号分隔的项目列表。支持以下值:

      参数作用
      height = pixels,width = pixels窗口的高度,宽度,最小.值为100
      left = pixels,top = pixels该窗口的左侧位置,窗口顶部的位置.仅限IE浏览器
      hannelmode = yes /no /1 /0是否要在影院模式显示 window。默认是没有的。仅限IE浏览器
      directories = yes /no /1 /0是否添加目录按钮。默认是肯定的。仅限IE浏览器
      fullscreen = yes /no /1 /0浏览器是否显示全屏模式。默认是没有的。在全屏模式下的 window,还必须在影院模式。仅限IE浏览器
      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
  • close()方法

    关闭浏览器窗口,谁调用就关闭谁。

    例如:

    <button id="closeWindow">关闭窗口</button>
    <script>
    	var closeWindow = document.getElementById("closeWindow");
        closeWindow.onclick = function(){
            window.close(); //关闭调用它的窗口
        }
    </script>
    
第三类:与定时器有关的方法

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

  • setTimeout()

    指定的时间后执行指定的函数
    参数1:函数对象
    参数2:时间,单位毫秒
    返回值:返回当前定时器的id

    <script>
        //第一个参数传入方法名,不带括号,第二个参数传入时间(单位毫秒)
        var id = setTimeout(fun,3000);
    	function fun(){
    		alert("hello");
    	}
    </script>
    
  • setInterval()

    每间隔指定的时间执行指定的函数
    参数1:函数对象
    参数2:时间,单位毫秒
    返回值:返回当前间隔器的id

    //间隔执行
    function testSetInterval(){
         var id = window.setInterval(function(){
              alert("间隔执行");
         },2000);  
    }
    

erval()**

每间隔指定的时间执行指定的函数
参数1:函数对象
参数2:时间,单位毫秒
返回值:返回当前间隔器的id

```javascript
//间隔执行
function testSetInterval(){
     var id = window.setInterval(function(){
          alert("间隔执行");
     },2000);  
}
```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/295355.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试算法98:路径的数目

题目 一个机器人从mn的格子的左上角出发&#xff0c;它每步要么向下要么向右&#xff0c;直到抵达格子的右下角。请计算机器人从左上角到达右下角的路径的数目。例如&#xff0c;如果格子的大小是33&#xff0c;那么机器人从左上角到达右下角有6条符合条件的不同路径。 分析…

教学/直播/会议触摸一体机定制_基于展锐T820安卓核心板方案

触控一体机是一种集先进的触摸屏、工控和计算机技术于一体的设备。它取代了传统的键盘鼠标输入功能&#xff0c;广泛应用于教学、培训、工业、会议、直播、高新科技展示等领域。触摸一体机的应用提升了教学、会议和展示的互动性和信息交流。 触摸一体机方案基于国产6nm旗舰芯片…

鸿蒙问题之本地模拟器无法识别

今天按例打开本地模拟器&#xff0c;发现DevEco Studio不能检测到我的本地模拟器了。 重启了DevEco Studio和模拟器多次都无果。果断删除模拟器 然后创建一个新的&#xff0c;就可以成功检测到了。这应该是idea的一个bug

外包干了5个月,技术明显退步了...

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年12月份&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测…

《知识扫盲》ROS和ROS2对比

文章摘选自&#xff1a;ROS与ROS2对比 1.ROS问题举例 ROS的设计目标是简化机器人的开发&#xff0c;如何简化呢&#xff1f;ROS为此设计了一整套通信机制&#xff08;话题、服务、参数、动作&#xff09;。 通过这些通信机制&#xff0c;ROS实现了将机器人的各个组件给的连接…

基于springboot的java读取文档内容(超简单)

读取一个word文档里面的内容&#xff0c;并取出来。 代码&#xff1a; SneakyThrowsGetMapping(value "/readWordDoc")ApiOperationSupport(order 1)ApiOperation(value "文档读取 ", notes "文档读取 ")public R ReadWordDoc () {System.o…

如何在 ChatGPT 上使用 Wolfram 插件回答数学问题

这里写自定义目录标题 写在最前面Wolfram是什么&#xff1f;ChatGPT 如何与 Wolfram 相结合&#xff0c;为什么有效&#xff1f;如何在 ChatGPT 上安装 Wolfram 插件&#xff1f; 写在最前面 参考&#xff1a;https://clickthis.blog/zh-CN/how-to-answer-math-questions-usin…

Codeium在IDEA里的3个坑

转载自Codeium在IDEA里的3个坑&#xff1a;无法log in&#xff0c;downloading language server和中文乱码_downloading codeium language server...-CSDN博客文章浏览阅读1.7w次&#xff0c;点赞26次&#xff0c;收藏47次。Codeium安装IDEA插件的3个常见坑_downloading codeiu…

arr.prototype 数组的方法

1.forEach 作用:遍历这个数组 代码&#xff1a; let arr [10, 20, 30, 40, 50];arr.forEach((item) > {console.log(item);}); 返回值:没有返回值 2.fiflter 作用:过滤数组 代码&#xff1a; let arr [10, 20, 30, 40, 50];let newArr arr.filter((item) > {retu…

Mysq之——分库分表

Mysq之——分库分表 简介分库分表的方式垂直分表垂直分库水平分库水平分表 图解&#xff1a;垂直分表与水平分表&#xff08;分库类似&#xff09;分库分表带来的问题 简介 分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题&#xff0c;将原来独立的数据库拆分成…

应用层网络协议

tags: [“计算机网络”] descripution: “学习应用层的一些常用协议” 网络协议&#xff1a;约定的信息传输的格式&#xff0c;如几个字节是消息头、消息头记录什么信息之类的&#xff1b;c/s架构&#xff1a;不一定是两台计算机&#xff0c;而是两个应用、两个端口工具&#…

打破技术壁垒,低代码工具带您开启中小电商企业数字化时代

随着互联网技术的不断进步和智能手机的普及&#xff0c;越来越多的消费者选择在网络上购物&#xff0c;这不仅为传统零售业带来巨大冲击&#xff0c;也为中小型电商提供了宝贵的发展机遇。 商务部数据显示&#xff0c;2023年&#xff0c;电子商务持续推动消费恢复增长。1-11月…

异步http接口调用库:httpx

谈到http接口调用&#xff0c;Requests大家并不陌生&#xff0c;例如&#xff0c;robotframework-requests、HttpRunner等HTTP接口测试库/框架都是基于它开发。这里将介绍另一款http接口测试框架:httpx。 它的API和Requests高度一致。 github: GitHub - encode/httpx: A next…

StreamPark + PiflowX 打造新一代大数据计算处理平台

&#x1f680; 什么是PiflowX PiFlow 是一个基于分布式计算框架 Spark 开发的大数据流水线系统。该系统将数据的采集、清洗、计算、存储等各个环节封装成组件&#xff0c;以所见即所得方式进行流水线配置。简单易用&#xff0c;功能强大。它具有如下特性&#xff1a; 简单易用…

群晖Docker部署HomeAssistant容器结合内网穿透远程控制家中智能设备

目录 一、下载HomeAssistant镜像 二、内网穿透HomeAssistant&#xff0c;实现异地控制智能家居 三、使用固定域名访问HomeAssistant 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站 Ho…

树低级(C语言版)

一.树基本计算规则 关于树的大部分知识点我们都讲过了&#xff0c;那么如果我给你树的节点&#xff0c;你可以算出叶子节点个数吗&#xff1f; 下面我们总结下一些计算规则&#xff1a; 1.父子计算规则&#xff1a; parent(child-1)/2; leftchildparent*21,rightchildpare…

设计循环队列——oj题622

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;LeetCode刷题|数据结构|Linux 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 题目要求&#xff1a;应该支持如下操作&#xff1a;示例&#xff1a;提示&#xff1a; 结构体定义队列的创建基本操作判断队列是否为空&#xf…

python 数据容器

数据容器概念 一个可以存储多个元素的python数据类型 python有的数据容器 list(列表) tuple(元组) str(字符串) set(集合) dct(字典) 列表 python的列表的数据类型可以是不同的 my_list ["1",123,True,[123,"3333",d,False]]for item in my_list:p…

第三部分使用脚手架:vue学习(61-65)

文章目录 61 创建vue脚手架![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f71d4324be0542209e690ab9e886d199.png)62 分析脚手架结构63 render函数64 修改默认配置65 ref 属性 61 创建vue脚手架 写完vue文件&#xff0c;没有脚手架做翻译&#xff0c;浏览器不认识…

数据结构:图详解

图的存储方式 邻接矩阵 首先先创建图&#xff0c;这一个我们可以使用邻接矩阵或者邻接链 表来进行存储&#xff0c;我们要实现的无向图的创建&#xff0c;我们先创建 一个矩阵尺寸为n*n&#xff0c;n为图中的节点个数如图所示 可以看出图中有5个结点&#xff0c;那我们创建…