热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

温故js系列(11)BOM

前端学习:教程&开发模块化规范化工程化优化&工具调试&值得关注的博客Git&面试-前端资源汇总欢迎提issues斧正:BOMJavaScript-BOM

前端学习:教程&开发模块化/规范化/工程化/优化&工具/调试&值得关注的博客/Git&面试-前端资源汇总

欢迎提issues斧正:BOM

Javascript-BOM

BOM是browser object model的缩写,简称浏览器对象模型。它本身是没有标准的或者还没有哪个组织去标准它,所以,BOM缺乏标准。它提供了很多对象,并且每个对象都提供了很多方法与属性,用于访问浏览器的功能。

window对象

BOM的核心对象是window,它表示浏览器的一个实例,主要用于管理窗口与窗口之间的通讯。window 对象处于Javascript结构的最顶层,对于每个打开的窗口,系统都会自动为其定义window 对象。F12打开console,输入window,即可看到window的所有属性和方法。太多了,很多是不需要我们去深入了解的。

window 对象的属性

属性 含义
closed 当窗口关闭时为真
defaultStatus 窗口底部状态栏显示的默认状态消息
document 窗口中当前显示的文档对象
frames 窗口中的框架对象数组
history 保存着窗口最近加载的URL
length 窗口中的框架数
location 当前窗口的URL
name 窗口名
offscreenBuffering 用于绘制新窗口内容并在完成后复制已存在的内容,控制屏幕更新
opener 打开当前窗口的窗口
parent 指向包含另一个窗口的窗口(由框架使用)
screen 显示屏幕相关信息,如高度、宽度(以像素为单位)
self 指示当前窗口。
status 描述由用户交互导致的状态栏的临时消息
top 包含特定窗口的最顶层窗口(由框架使用)
window 指示当前窗口,与self 等效

要验证这些属性,直接F12打开console,验证即可。

window 对象的方法

方法 功能
alert(text) 创建一个警告对话框,显示一条信息
blur() 将焦点从窗口移除
clearInterval(interval) 清除之前设置的定时器间隔
clearTimeOut(timer) 清除之前设置的超时
close() 关闭窗口
confirm() 创建一个需要用户确认的对话框
focus() 将焦点移至窗口
open(url,name,[options]) 打开一个新窗口并返回新window 对象
prompt(text,input) 创建一个对话框要求用户输入信息
scroll(x,y) 在窗口中滚动到一个像素点的位置
moveBy(x,y) 按照给定像素参数移动指定窗口,x,y代表水平位移量和垂直位移量
moveTo(x,y) 将窗口移动到指定的指定坐标(x,y)处
resizeBy(x,y) 将当前窗口改变指定的大小(x,y),当x、y的值大于0时为扩大,小于0时为缩小
resizeTo(x,y) 将当前窗口改变大小,x、y分别为宽度和高度
print() 调出打印对话框
find() 调出查找对话框
setInterval(func,time) 经过指定时间间执行代码
clearInterval("id"); 取消setInterval
setTimeout(func,time) 在定时器超过后执行代码
clearTimeout("id"); 取消还未执行的setTimeout

window下的属性和方法,可以使用window.属性、window.方法()或者直接属性、方法()的方式调用。下面简要介绍几个。

window属性-窗口的位置和大小

窗口的位置,IE、Safari、Opera 和Chrome都提供了screenLeft 和screenTop 属性,分别用于表示窗口相对于屏幕左边和上边的位置。firefox 则在screenX 和screenY 属性中提供相同的窗口位置信息,Safari 和Chrome 也同时支持这两个属性。

console.log(screenLeft); //102, fireFox下输出screenLeft is not defined
console.log(screenX); //102

兼容:

var leftX = (typeof screenLeft == 'number') ? screenLeft : screenX;
var topY = (typeof screenTop == 'number') ? screenTop : screenY;

窗口页面大小,IE、Firefox、Safari、Opera 和Chrome 均为此提供了4 个属性:innerWidth和innerHeight,返回浏览器窗口本身的尺寸;outerWidth 和outerHeight,返回浏览器窗口本身及边框的尺寸。

console.log(innerWidth); //1366 页面宽度
console.log(innerHeight); //681 页面高度
console.log(outerWidth); //1366 页面长度+边框
console.log(outerHeight); //768 页面高度+边框
//缩小窗口数据就会有变化

旧的IE版本没有提供当前浏览器窗口尺寸的属性。不过,DOM有提供相关的方法:

document.documentElement.clientWidth
document.documentElement.clientHeight

当然,这是标准模式下,还要兼容怪异模式:

document.body.clientWidth; //非标准模式使用body
document.body.clientHeight;

window方法-系统对话框

浏览器通过alert()、confirm()和prompt()方法可以调用系统对话框向用户显示信息。

alert()

alert('xzavier warning');

直接弹出弹框,弹框只有确定和关闭按钮。
一般用于用户交互时做出提示,不过这种方法的用户体验不是很好,现在都流行使用业务需要的用户体验好的弹窗。
另外,以前常用于调试代码,但现在基本不用了。因为它很烦,弹一个要关一个。如果调试代码后忘记关掉,还会给用户带来较差的体验。现在都用console,在控制台打印,研发人员可以很方便的看到调试信息,也不用去关闭弹窗之类的,就算一时疏忽忘记删掉调试代码,也不会影响到用户体验。

confirm()

confirm('confirm or cancel');

确定和取消弹框,按确定返回true,按取消或者关闭按钮返回false。

if (confirm('confirm or cancel')) { alert('you confirmed');
} else {alert('you canceled');
}

prompt()

prompt('please input a number', 0);

输入提示框,带两个参数,一个提示,一个值。按确定返回输入值,不填返回空,按取消或者关闭按钮返回null。

window方法-新建窗口

window.open()方法可以导航到一个特定的URL,也可以打开一个新的浏览器窗口。它可以接受四个参数:
1.要加载的URL
2.窗口的名称或窗口目标
3.一个字符串参数,表示新窗口的长宽等属性值
4.一个表示新页面是否取代浏览器记录中当前加载页面的布尔值。

open('https://segmentfault.com/blog/xzavier'); //新建页面并打开
open('https://segmentfault.com/blog/xzavier','xzavier'); //新建页面并命名窗口并打开
open('https://segmentfault.com/blog/xzavier','_parent'); //在本页窗口打开

target 属性:
blank - 在一个新的未命名的窗口载入文档
_self - 在相同的框架或窗口中载入目标文档
_parent - 把文档载入父窗口或包含了超链接引用的框架的框架集
_top - 把文档载入包含该超链接的窗口,取代任何当前正在窗口中显示的框架

字符串参数:

属性 值 说明
width 数值 新窗口的宽度 ,不能小于100
height 数值 新窗口的高度,不能小于100
top 数值 新窗口的Y坐标,不能是负值
left 数值 新窗口的X坐标,不能是负值
location yes/no 是否在浏览器窗口中显示地址栏,不同浏览器默认值不同
menubar yes/no 是否在浏览器窗口显示菜单栏,默认为no
resizable yes/no 是否可以通过拖动浏览器窗口的边框改变大小,默认为no
scrollbars yes/no 如果内容在页面中显示不下,是否允许滚动,默认为no
status yes/no 是否在浏览器窗口中显示状态栏,默认为no
toolbar yes/no 是否在浏览器窗口中显示工具栏,默认为noopen('https://segmentfault.com/blog/xzavier','xzavier','width=600,height=400,top=200,left=400,resizable=yes');
//类似一个弹窗弹出一个网页,open有返回值,返回window对象

window方法-setTimeout和setInterval

Javascript是单线程语言,它允许通过设置超时值和间歇时间值来调度代码在特定的时刻执行。setTimeout在指定的时间过后执行代码,setInterval是每隔指定的时间就执行一次代码。

setTimeout

接受两个参数:要执行的代码和超时时间(单位:毫秒)

function timer() {console.log("xzavier's timer");
}
setTimeout(timer, 2000);

setTimeout()返回一个数值ID,表示这个超时调用。这个ID是超时调用的唯一标识符,可以通过它来取消超时调用。要取消尚未执行的超时调用,可以调用clearTimeout()方法并将相应的超时调用ID作为参数传递给它。

function timer() {console.log("xzavier's timer");
}
var xzavier = setTimeout(timer, 2000);
clearTimeout(xzavier); //取消超时调用不执行

setInterval

setInterval按照指定的时间间隔重复执行代码,直至间歇调用被取消或者页面被卸载。设置间歇调用的方法是setInterval(),接受参数:要执行的代码和每次执行之前需要等待的毫秒数

setInterval(function () {console.log('xzavier');
}, 2000);

取消间歇调用方法和取消超时调用类似,使用clearInterval()方法。但取消间歇调用的重要性要远远高于取消超时调用,因为在不加干涉的情况下,间歇调用将会一直执行到页面关闭。

var xzavier = setInterval(function () { console.log('xzavier');
}, 1000);
clearInterval(xzavier);

一般来说,使用了setInterval就一定要使用clearInterval去清除,所以,使用超时调用来模拟间歇调用是一种最佳模式。因为,使用超时调用时,没必要跟踪超时调用ID,因为每次执行代码之后,如果不再设置另一次超时调用,调用就会自行停止。

location对象

location是BOM对象之一,它提供了与当前窗口中加载的文档有关的信息。location对象是window对象的属性,也是document对象的属性。所以window.location和document.location等效。

location 对象的属性

属性 描述的URL内容
host 主机名:端口号
hostname 主机名
href URL
pathname 路径名
port 端口号
protocol 协议部分
search 查询字符串
hash 如果该部分存在,表示锚点部分

location 对象的方法

方法 功能
assign() 跳转到指定页面,与href等效
reload() 重载当前URL
repalce() 用新的URL 替换当前页面

F12打开调试器,console下打印window.location即可查看location的属性和方法。

location.reload(); //最有效的重新加载,有可能从缓存加载
location.reload(true); //强制加载,从服务器源头重新加载
location.assign('https://segmentfault.com/blog/xzavier'); //跳转到指定的URL
location.replace('https://segmentfault.com/blog/xzavier'); //可以避免产生跳转前的历史记录,跳转后浏览器不能返回上一个页面

navigator对象

navigator对象,其实也是window对象的属性,包含大量有关Web浏览器的信息,在检测浏览器及操作系统上非常有用。

console.log(navigator.userAgent);
//用户代理头信息,很多时候用于判断浏览器 Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
console.log(navigator.appCodeName);
//浏览器代码名 Mozilla
//appCodeName 属性是一个只读字符串,声明了浏览器的代码名。
//在所有以 Netscape 代码为基础的浏览器中,它的值是 "Mozilla"。
//为了兼容起见,在 Microsoft 的浏览器中,它的值也是 "Mozilla"。
console.log(navigator.appName);
//官方浏览器名 Netscape
//appName返回所使用浏览器的名称。该属性并不一定能返回正确的浏览器名称。
//在基于 Gecko 的浏览器 (例如 Firefox)和基于 WebKit 的浏览器
//(例如 Chrome 和 Safari)中,返回的浏览器名称都是 "Netscape".
console.log(navigator.appVersion);
//浏览器版本信息 5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
console.log(navigator.COOKIEEnabled);
//是否启用COOKIE,返回true/false
console.log(navigator.javaEnabled);
//是否启用java,返回true/false
console.log(navigator.platform); Win32
//浏览器所在计算机平台
console.log(navigator.plugins);
//安装在浏览器中的插件数组 PluginArray {0: Plugin, 1: Plugin, 2: Plugin, 3: Plugin, 4: Plugin, length: 5}

history对象

history对象是window 对象的属性,它保存着用户上网的记录,从窗口被打开的那一刻算起。
history对象有一个length属性,表示history 对象中的记录数。history对象有三个方法。

方法 功能
back() 前往浏览器历史条目前一个URL,类似后退
forward() 前往浏览器历史条目下一个URL,类似前进
go(number) 跳转指定历史记录的URL

screen对象

screen对象是window 对象的属性,用于获取屏幕的信息。

属性 描述
width 屏幕的宽度
height 屏幕的高度
availWidth 窗口可以使用的屏幕的宽度
availHeight 窗口可以使用的屏幕的高度

document对象见: 温故js系列-DOM



推荐阅读
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
author-avatar
时间熔金-岁月铅华_758
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有