BOM(Browser Object Model)

BOM(浏览器对象模型),提供了一系列操作浏览器,获取浏览器信息的接口。这些接口在平时的工作中会经常用到,例如当前页面的刷新,获取url的参数等等。

BOM相关对象

注:图片来自 http://www.dreamdu.com/javascript/what_is_bom/

window对象

window对象是BOM的核心,表示的是浏览器的实例。

在全局作用域下声明的变量会变成window对象的属性,函数会变成window对象的方法。但是全局环境下声明的变量对比window对象的属性和方法还是有区别的。

  1. 访问不存在的全局变量会报错,但是访问 window 对象上不存在的属性会返回 undefined,并不会报错。
  2. 可以使用 delete 操作符删除 window 对象上的正常属性并返回结果为 true 删除成功,但是删除全局变量则返回结果为 false 删除失败。

frames

window 对象的 frames 属性里面有整个页面的全部框架的 window 对象,访问这些框架的 window 对象的方式可以是使用框架名称( iframe标签的name属性 <iframe name='frame1'></frame> ,同时 window.name 也可以获取当前框架的名称),也可以是按照从左到右从上到下的顺序(从0开始)来访问,同时可以在框架内使用 self 访问自身 window 对象,使用 parent 访问上级框架的 window 对象,使用 top 访问顶级框架的 window 对象(浏览器窗口)。在顶级环境中这三个属性是相等的(top === self && parent === self // true)。

在不同的框架中,因为每个框架都有自己的 window 对象并且 window 对象都包含原生类型的构造函数,这就意味着框架1的 {} 并不是框架2的 Object 的实例。

// a.html
<html><head></head><body><iframe src="b.html"></iframe><script>function a(){alert('a');}frames[0].onload = function(){  // 注意这里要等到框架加载完成才能取到框架的window对象this.b();}</script></body>
</html>
// b.html
<html><head></head><body><script>function b(){alert('b');}top.a();// 或者parent.a();</script></body>
</html>

上面代码的执行结果是先弹出 a 再弹出 b。这就说明可以通过 parent 来获取父框架,也可以使用 frames 属性获取当前页面内的框架。

注:涉及到跨页面操作,必须要通过服务器访问文件,并且两个页面要在同一域下才可。例如上面的文件a直接打开是不能正常运行的,需要将a文件和b文件放在一个服务器下然后通过域名或者ip来访问才能正常显示。

location

location的组成部分
location 对象是唯一一个既是 window 对象的属性也是 document 对象的属性 window.location === document.location

注:图片来自 http://www.dreamdu.com/javascript/window.location/

该属性中保存了浏览器窗口当前url地址的格式化信息,同时可以通过该属性提供的方法来指定浏览器当前窗口的页面跳转。

获取格式化好的search属性中的参数

function formatQuery(search){var qs = search.length ? search.slice(1) : '',qsArr = qs.length ? qs.split('&') : [],i = 0,len = qsArr,result = {};for( ; i < len; i++ ){var _item = qsArr[i].split('=');    result[decodeComponentURI(_item[0])] = decodeComponentURI(_item[0]); //不要忘记解码}return result;}

修改每一个属性(除了hash)都会刷新浏览器,并且都会(包括hash)生成一个历史记录。

注:location.toString() 得到的值就是当且页面的地址 location.toString() === location.href //true

location.reload()

使用 location.reload() 会刷新当前页面,但是有可能在缓存中读取页面,如果想要强制重新从服务器获取页面可以使用 location.reload(true)

location.assign()

指定页面跳转地址,对 location.href(也可以直接对 location 赋值 window.location = url)赋值跳转就是调用该方法。

注:该方法并不能完成当前页面的刷新 location.assign(location.href),并不会刷新页面。

location.replace()

该方法和 location.assign() 一样,但是会 替换当前的地址记录,也就是说使用该方法跳转 页面history.length 并不会加一 ,并且 history.back()不能回到上一个页面

a.html —-> b.html –replace–> c.html –back–> a.html

注:同上并不能用于页面的刷新,也就是说使用 location 对象实现刷新必须要使用 reload 方法

history

history对象里面记录了浏览器该窗口访问的历史记录栈,但是由于隐私的问题并不能获取浏览器到底访问了哪些页面,但是可以通过history.length知道历史栈里面的记录条数。

history.back();  // 如果有就加载历史记录中后一个链接history.forward(); // 如果有就加载历史记录中前一个链接history.go(0); // 刷新当前页history.go(1); // 同 history.forward();history.go(-1); // 同 history.back();history.go(n); // 正数向前,负数向后。值就表示从当前记录开始第n条记录

注:history 对象的这三个方法并不会改变 length 的长度,也就是说 back 并不会删除当前页面的记录,还可以通过 forward 回来,但是如果 back 了并且打开了别的链接,那么在 back 之前的页面记录在 history 中就没有了。
a.html —-> b.html —-> c.html –back–> b.html –forward —-> c.html –back–> b.html –back–> a.html —-> e.html –back–> a.html –forward–> e.html –forward–> e.html

navigator

userAgent属性是用户代理头的字符串表示,经常被用于判断设备。比如是否是在微信中,是什么浏览器等。

navigator.userAgent // "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"

但是userAgent的信息并不十分可靠,应为这个属性是可写的,也就是说会被伪造。

cookieEnabled属性返回表示cookie是否启用,cookie返回true表示启用,否则返回false表示未启用。

navigator.cookieEnabled // true

navigator对象除了上面两个常用的属性外还有很多其他的属性具体看文末参考。

screen

可以通过screen对象获取电脑屏幕的相关信息。

width:屏幕的宽度

height: 屏幕的高度

availHeight:屏幕可用高度,应为系统会有任务栏等并不能全部都给浏览器用,所以这个值可能和screen.height不一致

availWidth:屏幕可用宽度

计时器

setTimeout方法 超时调用

超时调用:是指在规定时间( 时间是以毫秒为单位)后执行指定函数。

var id = setTimeout(function(){console.log('1秒后')
}, 1000); // 1秒后打印 '1秒后'

该方法会返回一个 int 类型的数据,可以通过该值去取消定时器的执行。

clearTimeout(id); // 这样就会不打印 '1秒后' 

setInterval方法 间歇调用

间歇调用:指定的时间间隔重复执行指定函数。

var id = setInterval(function(){console.log('1秒后')
}, 1000); // 每间隔 1 秒就会答应出 '1秒后'
clearInterval(id); // 停止打印

使用场景:

  1. 倒计时(验证码获取)
  2. 动画
  3. 数字时钟
  4. 等等

打开新窗口

我们知道可以通过a标签的 target="_blank" 来让浏览器打开一个新窗口,那么怎么使用js来打开新的窗口?

可以使用 window.open( url, target, features ) 返回值是一个新窗口的window对象,可以用于关闭新打开的窗口(newWindow.close()

window.open('http://www.baidu.com', '_blank', 'height=600,width=600'); // 这样就在浏览器中打开了一个新窗口
//如果没有第三个参数就是打开一个新标签页,如果第二个属性不是 _blank 不会打开一个新窗口

type:值可以是 _blank、_self、_top、_parent和页面中的框架名称中的一个。

features:字段的要求是用逗号分割属性并且属性之间不能使用空格,除了height、width等基本属性还有其它属性详见参考。

系统对话框

系统对话框可以提示用户相关信息或者做出简单的交互。弹出系统对话框的时候js代码是暂停运行的,只有用户做出响应之后才会继续执行,这是同步的。

alert(msg) 会将msg展示出来,并且只有一个确定按钮

var a = alert('控制台没有打印"a"'); // 没有返回值
console.log("关闭对话框后,控制台打印了'a'", "我是alert的返回值:" + a);

confirm(msg) 会展示msg,并且有确定和取消,确定返回 true,取消返回false

var res = confirm('努力学习就会进步吗?');
if( res ){console.log('努力学习就会进步');
}else{console.log('努力学习不会进步');
}

prompt(msg) 会展示一个msg并且提供一个输入框,返回值就是输入的值

var res = prompt('请输入年龄');  // 如果点击了取消返回值是null,点击确定返回值就是输入框的值。if( res ){console.log('年龄是:' + res);
}

尺寸

获取浏览器可视窗口的尺寸并不包括工具栏和滚动条

// 现代浏览器
window.innerHeight// IE6/7/8
document.documentElement.clientHeight
// 或者
document.body.clientHeight// 完整方案
var h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
var w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;

参考

http://www.jb51.net/article/97904.htm

http://www.w3school.com.cn/jsref/dom_obj_navigator.asp

http://www.dreamdu.com/javascript/bom/

https://itbilu.com/javascript/js/4k9JcnZRl.html#BOM-screen

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

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

相关文章

入门 IT 行业,该具备哪些技能?

对于刚开始进入IT的新人来说&#xff0c;“必备技能”往往意味着一个长长的、标有重要度的学习列表&#xff0c;但是过长的列表通常会导致新人不知如何开始学习&#xff0c;压力倍增。本文尝试列举出最重要的几个技能&#xff0c;也期望通过此列表能给新人一个比较明确的学习重…

实验七作业

Part 1:验证性实验 将line29&#xff1a;for(i0;i<N;i)改为while(!feof(fp)) // 从文本文件file1.dat中读取数据&#xff0c;找出最高分和最低分学生信息&#xff0c;并输出在屏幕上 #include <stdio.h> #include <stdlib.h>#define N 10// 定义一个结构体类型…

块级格式化上下文(Block Formatting Context)

CSS块级格式化上下文是块级盒子的一种能力&#xff0c;这种能力并不是直接通过css属性声明而获得的&#xff0c;而是添加css的一部分相关属性之后自动获得的能力&#xff0c;也就是说没有一个明确的属性就是生成块级格式化上下文的。 块级格式化上下文的能力就是让具有该能力的…

前端性能优化方法总结

一个网站前端性能的好坏很大程度上影响了用户愿不愿意使用访问这个网站&#xff0c;因此对前端进行性能优化是个很重要的事情。  对于前端性能优化这个问题&#xff0c;主要学习自yahoo前端性能团队总结的35条黄金定律总结&#xff0c;觉得很全很赞&#xff0c;做个学习总结和…

Akka笔记–演员介绍

过去做过多线程的任何人都不会否认管理多线程应用程序有多么艰辛和痛苦。 我说管理是因为它一开始很简单&#xff0c;一旦您开始看到性能改进&#xff0c;它就会变得非常有趣。 但是&#xff0c;当您发现没有一种简单的方法可以从子任务中的错误或难以发现的僵尸错误中恢复时&a…

Java英雄:丹·艾伦

“ Java英雄 ”系列休息了很长时间。 老实说&#xff0c;我想即使有很多人想在这里收录&#xff0c;它也可能会以虚无收场。 其中之一是丹。 我第一次要求他捐款已经将近一年半了&#xff0c;与此同时发生的一切&#xff0c;让我不再有任何答案就让我安心了。 但是以下内容在Ja…

Java-Class-I:java.util.List

ylbtech-Java-Class-I&#xff1a;java.util.List1.返回顶部 1.1、import java.util.ArrayList;import java.util.List; 1.2、List<Integer> newList new ArrayList<Integer>();newList.add(3); 2、 2.返回顶部1.1、import java.util.*;public class Test{public …

推荐:个人时间跟踪工具 ManicTime

在《个人管理 &#xff0d; 目标管理之前&#xff0c;你会时间管理吗》中我介绍的时间管理三阶段之一“对时间的实际去处进行记录”时说过现在有很多时间管理工具&#xff0c;也有人希望我介绍一下我使用的工具&#xff0c;那么我就利用中午休息时间&#xff0c;马上给大家介绍…

SQL Server 2005怎样进行性能排错

很少会有偶然的性能下降。设计不良的数据库或工作负载配置不正确的系统会经常导致性能问题。管理员需要能预先阻止或最小化问题的影响&#xff0c;当管理员遇到问题时&#xff0c;应该诊断问题并采取正确操作来修复问题。本文提供了按部就班的指导&#xff0c;通过使用可用的工…

JVM PermGen –您在哪里?

这篇文章介绍了JVM内存结构的一些基础知识&#xff0c;并快速窥视了PermGen&#xff0c;以了解自Java SE 8出现以来它已消失的地方。 裸基础 JVM只是系统上运行的另一个进程&#xff0c;魔术始于java命令。 像任何OS进程一样&#xff0c;它需要内存才能运行。 记住– JVM本身是…

python6-函数

转载于:https://www.cnblogs.com/WIU1905/p/11101249.html

Windows Phone 7.1 “芒果” SDK Beta 下载地址

Windows Phone 7.1 “芒果” SDK Beta 今天早上发布&#xff0c;第一时间下载体验。功能果然激动人心。 下载地址&#xff1a; 离线ISO请点我&#xff0c; 在线安装请点我。转载于:https://www.cnblogs.com/finehappy/archive/2011/05/25/2056849.html

Windows系统安装 ffmpeg

下载及解压 ffmpeg官方下载地址&#xff1a;https://ffmpeg.org/download.html 下载好后将其解压至你想保存的位置中。 环境变量设置 打开Windows设置&#xff0c;在搜索框输入&#xff1a;系统高级设置。 新建环境变量&#xff0c;并输入bin目录具体位置。 安装检查 按住 w…

Java黑科技之源:JVMTI完全解读

Java生态中有一些非常规的技术&#xff0c;它们能达到一些特别的效果。这些技术的实现原理不去深究的话一般并不是广为人知。这种技术通常被称为黑科技。而这些黑科技中的绝大部分底层都是通过JVMTI实现的。 形象地说&#xff0c;JVMTI是Java虚拟机提供的一整套后门。通过这套后…

常见的CSS布局

各种常见的CSS布局 在工作中会经常用到很多的布局方式&#xff0c;这里总结一下所遇到的布局&#xff0c;会持续更新。 悬挂布局 实现这种布局的方式有很多&#xff0c;这边主要挑两个&#xff0c;如下&#xff1a; 方式一&#xff1a;使用浮动和块级格式化上下文特性 这种…

OSCP-Kioptrix2014-2 漏洞利用

pChart 2.1.3 文件包含漏洞 搜索漏洞查看漏洞理由代码:hxxp://localhost/examples/index.php?ActionView&Script%2f..%2f..%2fetc/passwd 之前的8080端口禁止访问,看看apache的配置:http://192.168.1.78/pChart2.1.3/examples/index.php?ActionView&Script%2f..%2f..…

CodeSmith注册机,支持5.2.2和5.2.1版

CodeSmith&#xff0c;不用说了&#xff0c;大名鼎鼎的代码生成工具。最早是免费的&#xff0c;后来收费啦这个注册机是针对目前新的CodeSmith 5.2.2的&#xff0c;支持Professinal和其他版本。使用的方法&#xff1a;安装原版的试用版本&#xff0c;从官方网站下载运行试用版&…

linux epoll,poll,select

epoll函数用法&#xff0c;还有点poll和select 1&#xff0c;LT的epoll是select和poll函数的改进版。 特点是&#xff0c;读完缓冲区后&#xff0c;如果缓冲区还有内容的话&#xff0c;epoll_wait函数还会返回&#xff0c;直到把缓冲区全部读完。 2&#xff0c;ET的epoll&#…

shell学习笔记1-文件安全与权限

1&#xff0c;创建文件的用户和他所属的组拥有该文件&#xff0c;文件的属主可以设定谁具有读、写、执行该文件的权限&#xff0c;根用户可以改变任何普通用户的设置。 2&#xff0c;一个文件一经创建&#xff0c;就具有三种访问权限&#xff1a;读&#xff08;可以显示该文件的…

最新70佳单页网站设计案例欣赏(上篇)

单页网站是指只有一个页面的网站&#xff0c;这种形式的网站曾经非常流行&#xff0c;现在依然有很多人喜欢。不过&#xff0c;并不是每个网站都适合做成单页&#xff0c;一般都是内容比较少而且将来内容也不怎么增加的情况才适合这样做。如果你打算做一个这样的网站&#xff0…