【JS交互篇】BOM基础、Window、Location、Navagator、Screen、History对象

news2024/11/15 13:57:12

一、BOM 概述

在 JavaScript 语言中有三种对象:内置对象、宿主对象、自定义对象。

宿主对象就是执行 JavaScript 脚本的环境所提供的对象。对于网页编程来说,js 是运行在浏览器上的,所以对于网页编程来说,宿主对象就是浏览器对象,而学习浏览器对象,就要学习浏览器对象模型,即BOM。

JavaScript 基础到高级
Canvas游戏开发
原生JavaScipt案例合集
JavaScript +DOM基础

BOM (Browser Object Model),浏览器对象模型:

  • BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window ( 即:窗口对象 );
  • 浏览器对象模型(Browser Object Model)尚无正式标准;但由于现代浏览器已经(几乎)实现了 JavaScript 交互性方面的相同方法和属性,因此常被认为是BOM的方法和属性

在这里插入图片描述

二、Window 对象

2.1 概述

  • window 对象作为浏览器模型中的顶级对象,指的是当前浏览器窗口,其下有对应的只读属性指向 document、history、location、navigator、screen、clipboardData 等对象的引用。

  • 所有浏览器都支持 window 对象,所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员 (全局变量是 window 对象的属性,全局函数是window 对象的方法,甚至 Html Dom 的 document 也是 window 对象属性之一。

    window.document.getElementById("myId")document.getElementById("myId") 相同。

2.2 窗口的打开与关闭

  • open(url, target, args) 打开新窗口

    • 参数 url 可选。为打开的网址或路径
    • 参数 target 可选。窗口打开方式
    • 参数args 可选。窗口样式设置。为 key=value 的参数字符串。 窗口设置的样式参数参考如下:
      • top=像素值,窗口顶部离开屏幕顶部的像素数
      • left=像素值,窗口左端离开屏幕左端的像素数
      • width=像素值,窗口的宽度 height=像素值,窗口的高度
      • menubar=yes|no,设置窗口是否有菜单
      • toolbar=yes|no,设置窗口是否有工具条
      • scrollbars=yes|no,设置窗口是否有滚动条
      • status=yes|no,设置窗口是否有状态栏
  • close() 关闭当前窗口

2.3 窗口关系及框架

  • 通过 window.open() 创建的新窗口的 Window 对象具有 opener 属性,可以通过 opener 打开它的原始窗口,这样两个窗口之间就可以相互引用,彼此之间可以读取对方的属性方法,而窗体也是一样;

  • 窗体是由 iframe 创建的,该元素有 contentWindow 属性,它引用自身的 Window 对象,而 Window 对象有 frameElement 属性,若该 Window 对象表示一个窗体,则 frameElement 是对 iframe 元素的引用,如以下元素

    <iframe id = 'f1'></iframe>
    var elt = document.getElementById('f1');
    var win = elt.contentWindow;
    win.frameElement === elt; //true
    window.frameElement === elt; //false 对于顶级窗口来说永远是false
    
  • 每个 Window 对象都有一个 frames 属性,包括窗体和子窗体。frames 属性引用了它所包含的窗体和子窗体的 Window 对象,frames 是由这些 Window 对象组成的类数组对象,可通过数字或窗体名来进行索引,如引用第一个子窗体 frames[0],引用第二个子窗体的第三个子窗体 frames[1].frames[2],引用兄弟窗体 parent.frames[1];

  • 内置对象在不同的窗口、窗体之间是相互独立的,它们有自己的一份独立的构造函数和原型对象的副本,它会在所有窗口窗体内自动预定义;而自定义对象则不同,可以在能够相互通信的窗口、窗体之间共享这个对象的构造函数和它的原型;如窗口中定义了Set类,有子窗体A和B,则:
    在父窗口中 :

    var s = new Set(); String.toString = function(){return '内置对象';} (修改String的toString方法)
    s.a === 1; //true
    

    在A中 :

    var sa = new parent.Set(); parent.Set.prototype.a =1; (给自定义类Set的原型添加属性a,则所有能相互通信的窗口共享a)
    var str = '测试';  str.toString; //测试  (调用的是窗体A自身的String对象的toString方法)
    

    在B中 :

    var Set = top.Set(); var sb = new Set(); sb.a === 1;  //true
    
  • 要引用窗口中的一个窗体,可以使用如下语法:

    frames[i] //当前窗口的框架
    self.frames[i] //当前窗口的框架
    w.frames[i] //窗口 w 的框架
    
  • 要引用一个框架的父窗口(或父框架),可以使用下面的语法:

    parent //当前窗口的父窗口
    self.parent //当前窗口的父窗口
    w.parent //窗口 w 的父窗口
    
  • 要从顶层窗口含有的任何一个框架中引用它,可以使用如下语法:

    top //当前框架的顶层窗口
    self.top //当前框架的顶层窗口
    f.top //框架 f 的顶层窗口
    

2.4 消息框(弹窗、系统对话框)

  • alert() 警告框。常用于确保用户可以得到某些信息;当警告框出现后,用户需要点击确定按钮才能继续进行操作
  • confirm() 确认框。用于验证是否接收用户操作,当确认框弹出时,用户可以点击“确认”或者“取消”来确定用户操作,当点击“确认”,确认框返回true,如果点击“取消”,确认框返回false
  • prompt() 提示框。常用于提示用户在进入页面前输入某个值;当提示框出现后,用户需要输入某个值,然后点击确认后者取消按钮才能继续操作;若点击确认,那么返回输入的值,若点击 取消,则返回null

2.5 获取当前视口大小

innerWidth 获取当前视口的宽度(只读)

innerHeight 获取当前视口的高度(只读)

不包含工具栏、菜单栏、系统栏、控制台区域… 包含滚动条

IE8及以下浏览器版本不兼容,那么请使用以下方式获取:

document.documentElement.clientWidth || document.body.clientWidth;
dowcument.documentElement.clientHeight || document.body.clientHeight;

IE6及以下只能通过 document.body 获取

浏览器兼容性写法

var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;

2.6 计时器

setInterval(callbackfn, time) 间歇调用;每隔指定的时间执行一下重复的操作,多次 调用,除非手动清除

setTimeout(callbackfn, time) 延时调用;指定时间后去执行某个操作,只执行一次,可以在执行之前将其清除掉

clearInterval(timer) 清除指定间歇调用

clearTimeout(timer) 清除指定延时调用

var num = document.getElementById("num");
    var count = 0;
    var timer = window.setInterval(function(){
        if(count === 100){
            // 清除计时器
            clearInterval(timer)
        }
        num.innerHTML = count++ + "+";
},80);


window.setTimeout(function(){
    alert("不好意思,我打断一下!!")
},5000)
``

三、Navigator对象

Navigator对象属性如下:

属性说明
appCodeName返回浏览器的代码名
appName返回浏览器的名称
appVersion返回浏览器的平台和版本信息
platform返回运行浏览器的操作系统平台
userAgent返回由客户机发送服务器的user-agent 头部的值

三、Screen对象

Screen对象属性如下:

属性说明
availHeight返回屏幕的高度(不包括Windows任务栏)
availWidth返回屏幕的宽度(不包括Windows任务栏)
colorDepth返回目标设备或缓冲器上的调色板的比特深度
height返回屏幕的总高度
pixelDepth返回屏幕的颜色分辨率(每象素的位数) 不支持IE8及以下浏览器
width返回屏幕的总宽度

四、History对象

History对象属性如下:

属性说明
length返回历史列表中的网址数

History对象方法如下:

方法说明
back()加载 history 列表中的前一个 URL,相当于浏览器上面的回退箭头
forward()加载 history 列表中的下一个 URL,相当于浏览器上面的前进箭头
go()加载 history 列表中的某个具体页面

五、Location对象

Location对象属性如下:

属性描述
hash返回一个URL的锚部分
host返回一个URL的主机名和端口
hostname返回URL的主机名
href返回完整的URL
pathname返回的URL路径名。
port返回一个URL服务器使用的端口号
protocol返回一个URL协议(如:http https ftp等协议)
search返回一个URL的查询部分

Location对象方法如下:

方法说明
assign()载入一个新的文档
reload()重新载入当前文档,相当于浏览器上面的刷新按钮
replace()用新的文档替换当前文档

附地址栏解析:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jYjueXtA-1691110488436)(BOM笔记.assets/image-20210112161122731.png)]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“我要找到你”——主动救助,让乡村重疾儿童看病不再“两眼一抹黑”

走出医院&#xff0c;主动寻找 郑小伟是河北省阜平县妇幼保健院的儿科主任&#xff0c;在这里工作快20年了。从2021年11月开始&#xff0c;她的桌上一直摆着厚厚一叠阜平县重疾儿童住院名单。她对着上面的名字一个个打电话&#xff0c;手机打不通&#xff0c;就换座机再接着打…

高级语言相关理论[编译VS解释,动态VS静态,强类型VS弱类型]

编译型语言 VS 解释型语言 计算机高级语言按程序执行方式分为编译型和解释型 编译型和解释型语言的执行流程 编译型语言 所有源代码一次性通过编译器转换成二进制指令,即生成一个可执行程序(如Windows下的.exe),可执行程序包含的就是机器码;且无需重新编译,实现一次编译,无限…

Grafana集成prometheus(1.Prometheus安装)

下载docker镜像 docker pull prom/prometheus docker pull prom/node-exporter启动 node-exporter 该程序用以采集机器内存等数据 启动脚本 docker run -d -p 9100:9100 prom/node-exporter ss -anptl | grep 9100启动截图 prometheus 启动脚本 # 3b907f5313b7 为镜像i…

工业电子中的安森美推出PWM控制器 NCP1252ADR2G 用于正向和反激应用

NCP1252ADR2G 深力科 控制器提供了构建专用于 ATX 电源和任何正向应用的成本高效且可靠的 AC-DC 开关电源所需的一切内容。由于使用内部固定的计时器&#xff0c;可以在不依赖辅助 Vcc 的情况下检测输出过载。欠压输入针对低输入电压提供保护&#xff0c;提高了转换器安全性。最…

c语言——杨辉三角

//杨辉三角 #include<stdio.h> int main() {int i,j,k,n0,a[10][10];while(n<0||n>13){/*行数不超过13&#xff0c;为了显示规范*/printf("n即输入行数");scanf("%d",&n);}printf("%d行杨辉三角如下&#xff1a;\n",n);for(i1;i…

迁移学习:使用Restnet预训练模型构建高效的水果识别模型

目录 引言 1 迁移学习 1.1 什么是迁移学习 1.2 迁移学习能解决什么问题 1.3 迁移学习面临的三个问题 1.3.1 何时迁移 1.3.2 何处迁移 1.3.3 如何迁移 1.4 迁移学习的分类 1.4.1 按照学习方式的划分 1.4.2 按照使用方法的划分 2 Restnet网络 2.1 Restnet介绍 2.2 Re…

【FAQ】EasyGBS平台通道显示在线,视频无法播放并报错400的排查

EasyGBS是基于国标GB28181协议的视频云服务平台&#xff0c;它可以支持国标协议的设备接入&#xff0c;在视频能力上能实现直播、录像存储、检索与回放、云台控制、告警上报、语音对讲、平台级联等功能&#xff0c;既能作为业务平台使用&#xff0c;也能作为能力层平台调用。 我…

sentinel组件

目录 定义 4.加SentinelResource,blockHander是超过阈值之后执行的函数 5.设置阈值 6.springboot集成sentinel 定义 1.sentinel知道当前流量大小&#xff0c;在浏览器和后端之间加sentinel控制流量&#xff0c;避免大批量的瞬时请求都达到服务上&#xff0c;将服务压垮 2.…

数学建模-爬虫系统学习

尚硅谷Python爬虫教程小白零基础速通&#xff08;含python基础爬虫案例&#xff09; 内容包括&#xff1a;Python基础、Urllib、解析&#xff08;xpath、jsonpath、beautiful&#xff09;、requests、selenium、Scrapy框架 python基础 进阶&#xff08;字符串 列表 元组 字典…

Ceph入门到精通-远程开发Windows下使用SSH密钥实现免密登陆Linux服务器

工具&#xff1a; win10、WinSCP 服务器生成ssh密钥&#xff1a; 打开终端&#xff0c;使账号密码登录&#xff0c;输入命令 ssh-keygen -t rsa Winscp下载 Downloading WinSCP-6.1.1-Setup.exe :: WinSCP window 生成密钥 打开powershell ssh-keygen -t rsa 注意路径 …

招投标系统简介 企业电子招投标采购系统源码之电子招投标系统 —降低企业采购成本 tbms

​功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外…

js获取30天前的日期(不含今天)

js获取30天前的日期&#xff08;不含今天&#xff09; 例如&#xff1a;2023-8-4 let currentDate new Date(); // 获取当前日期currentDate.setDate(currentDate.getDate() - 30); // 将当前日期减去30天let year currentDate.getFullYear(); // 获取年份let month current…

行业追踪,2023-08-03

自动复盘 2023-08-03 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

Element-plus中tooltip 提示框修改宽度——解决方案

tooltip 提示框修改宽度方法&#xff1a; 在element中&#xff0c;想要设置表格的内容&#xff0c;超出部分隐藏&#xff0c;鼠标悬浮提示 可以在el-table 上添加show-overflow-tooltip属性 同时可以通过tooltip-options配置提示信息 如下图代码 <el-tableshow-overflo…

C语言笔试训练【第二天】

文章目录 第一题 第二题 第三题 第四题 第五题 第六题 第七题 大家好&#xff0c;我是纪宁。 今天是C语言笔试训练的第二天&#xff0c;一起加油&#xff01; 第一题 1、以下程序段的输出结果是&#xff08; &#xff09; #include<stdio.h> int main() {char…

【雕爷学编程】 MicroPython动手做(38)——控制触摸屏

MixPY——让爱(AI)触手可及 MixPY布局 主控芯片&#xff1a;K210&#xff08;64位双核带硬件FPU和卷积加速器的 RISC-V CPU&#xff09; 显示屏&#xff1a;LCD_2.8寸 320*240分辨率&#xff0c;支持电阻触摸 摄像头&#xff1a;OV2640&#xff0c;200W像素 扬声器&#…

Android 9-- 源码角度: Home键的监听和拦截

在做应用层APP需求的过程中&#xff0c;HOME键的监听&#xff0c;Back键的监听&#xff0c;这都是很常见的问题&#xff0c;那你有试过&#xff0c;去拦截HOME键的事件吗&#xff0c;有去了解过如何处理吗&#xff0c;流程如何 首先大家应该先了解一种情况&#xff0c;就是Andr…

Grafana集成prometheus(2.Grafana安装)

查找镜像 docker search grafana下载指定版本 docker pull grafana/grafana:10.0.1启动容器脚本 docker run -d -p 3000:3000 --namegrafana grafana/grafana:10.0.1查看是否启动 docker ps防火墙开启 检查防火墙3000端口是否开启 默认用户及密码 admin/admin 登录 ht…

Mapping温度分布验证选择数据记录仪时需要考虑的13件事

01 什么是温度分布验证&#xff1f; 温度分布验证是通过在规定的研究时间内测量定义区域内的多个点来确定特定温度控制环境或过程&#xff08;如冷冻柜、冰箱、培养箱、稳定室、仓库或高压灭菌器&#xff09;的温度分布的过程。温度分布验证的目标是确定每个测量点之间的差异&…

PHP客服系统聊天页面-thinkphp加载页面源码解释

PHP workerman客服系统加载聊天页面的代码逻辑流程&#xff0c;可以进行参考。如果想要二开修改的&#xff0c;可以根据这个流程来修改。 thinkphp的router部分 Route::get(kefu/:u/:f?, index/index/chat);查看控制器加载页面逻辑 application/index/controller/Index.php pu…