浏览器

目前主流的浏览器分这么几种:

  • IE 6~11:国内用得最多的IE浏览器,历来对W3C标准支持差。从IE10开始支持ES6标准;

  • Chrome:Google出品的基于Webkit内核浏览器,内置了非常强悍的JavaScript引擎——V8。由于Chrome一经安装就时刻保持自升级,所以不用管它的版本,最新版早就支持ES6了;

  • Safari:Apple的Mac系统自带的基于Webkit内核的浏览器,从OS X 10.7 Lion自带的6.1版本开始支持ES6,目前最新的OS X 10.11 El Capitan自带的Safari版本是9.x,早已支持ES6;

  • Firefox:Mozilla自己研制的Gecko内核和JavaScript引擎OdinMonkey。早期的Firefox按版本发布,后来终于聪明地学习Chrome的做法进行自升级,时刻保持最新;

  • 移动设备上目前iOS和Android两大阵营分别主要使用Apple的Safari和Google的Chrome,由于两者都是Webkit核心,结果HTML5首先在手机上全面普及(桌面绝对是Microsoft拖了后腿),对JavaScript的标准支持也很好,最新版本均支持ES6。

其他浏览器如Opera等由于市场份额太小就被自动忽略了。

另外还要注意识别各种国产浏览器,如某某安全浏览器,某某旋风浏览器,它们只是做了一个壳,其核心调用的是IE,也有号称同时支持IE和Webkit的“双核”浏览器。

不同的浏览器对JavaScript支持的差异主要是,有些API的接口不一样,比如AJAX,File接口。对于ES6标准,不同的浏览器对各个特性支持也不一样。

在编写JavaScript的时候,就要充分考虑到浏览器的差异,尽量让同一份JavaScript代码能运行在不同的浏览器中。

浏览器对象

浏览器对象模型(Browser Object Model)使 JavaScript 有能力与浏览器“对话”。

BOM 提供了很多对象,用于访问浏览器的功能,这些功能与任何网页内容无关。多年来,缺少事实上的规范导致 BOM 有很多问题,因为浏览器提供商会按照各自的想法随意去扩展它。W3C 为了把浏览器中 JavaScript 最基本的部分标准化,已经将 BOM 的主要方面纳入了 HTML5 的规范中。

window

window对象不但充当全局作用域,而且表示浏览器窗口。

window对象有innerWidthinnerHeight属性,可以获取浏览器窗口的内部宽度和高度。内部宽高是指除去菜单栏、工具栏、边框等占位元素后,用于显示网页的净宽高。

兼容性:IE<=8不支持。

// 可以通过调整浏览器窗口改变大小:
console.log('window inner size: ' + window.innerWidth + ' x ' + window.innerHeight);
window inner size: 1280 x 609

对应的,还有一个outerWidthouterHeight属性,可以获取浏览器窗口的整个宽高。

一些其他方法:

  • window.open() - 打开新窗口
  • window.close() - 关闭当前窗口
  • window.moveTo() - 移动当前窗口
  • window.resizeTo() - 调整当前窗口的尺寸

navigator

navigator对象表示浏览器的信息,最常用的属性包括:

  • navigator.appName:浏览器名称;
  • navigator.appVersion:浏览器版本;
  • navigator.language:浏览器设置的语言;
  • navigator.platform:操作系统类型;
  • navigator.userAgent:浏览器设定的User-Agent字符串。


警告:来自 navigator 对象的信息具有误导性,不应该被用于检测浏览器版本,这是因为:

  • navigator 数据可被浏览器使用者更改
  • 浏览器无法报告晚于浏览器发布的新操作系统

很多初学者为了针对不同浏览器编写不同的代码,喜欢用if判断浏览器版本,例如:

var width;
if (getIEVersion(navigator.userAgent) < 9) {width = document.body.clientWidth;
} else {width = window.innerWidth;
}

但这样既可能判断不准确,也很难维护代码。正确的方法是充分利用JavaScript对不存在属性返回undefined的特性,直接用短路运算符||计算:

var width = window.innerWidth || document.body.clientWidth;

screen

screen对象表示屏幕的信息,常用的属性有:

  • screen.width:屏幕宽度,以像素为单位;
  • screen.height:屏幕高度,以像素为单位;
  • screen.colorDepth:返回颜色位数,如8、16、24。

location

location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。
下表列出了 location 对象的所有属性

属性名 例子 说明
hash "#contents" 返回 URL 中的 hash(#号后跟零或多个字符),如果 URL 中不包含散列,则返回空字符串
host "shijiajie.com:80" 返回服务器名称和端口号(如果有)
hostname "shijiajie.com" 返回不带端口号的服务器名称
href "http:/shijiajie.com" 返回当前加载页面的完整URL。而 location 对象的 toString() 方法也返回这个值
pathname "/WileyCDA/" 返回URL中的目录和(或)文件名
port "8080" 返回 URL 中指定的端口号。如果 URL 中不包含端口号,则这个属性返回空字符串
protocol "http:" 返回页面使用的协议。通常是 http: 或 https:
search "?q=javascript" 返回URL的查询字符串。这个字符串以问号开头

location.href 属性返回当前页面的完整 URL。

http://www.example.com:8080/path/index.html?a=1&b=2#TOP

获得URL各个部分的值

location.protocol; // 'http'
location.host; // 'www.example.com'
location.port; // '8080'
location.pathname; // '/path/index.html'
location.search; // '?a=1&b=2'
location.hash; // 'TOP'

要加载一个新页面,可以调用location.assign()。如果要重新加载当前页面,调用location.reload()方法非常方便。

if (confirm('重新加载当前页' + location.href + '?')) {location.reload();
} else {location.assign('https://blog.csdn.net/m0_53698336?spm=1011.2124.3001.5343'); // 设置一个新的URL地址
}

history

history对象保存了浏览器的历史记录,JavaScript可以调用history对象的back()forward (),相当于用户点击了浏览器的“后退”或“前进”按钮。

为了保护用户隐私,对 JavaScript 访问该对象的方法做出了限制。

任何情况,你都不应该使用history这个对象了。

document

document对象表示当前页面。由于HTML在浏览器中以DOM形式表示为树形结构,document对象就是整个DOM树的根节点。

documenttitle属性是从HTML文档中的<title>xxx</title>读取的,但是可以动态改变:

要查找DOM树的某个节点,需要从document对象开始查找。最常用的查找是根据ID和Tag Name。

我们先准备HTML数据:

<dl id="drink-menu" style="border:solid 1px #ccc;padding:6px;"><dt>摩卡</dt><dd>热摩卡咖啡</dd><dt>酸奶</dt><dd>北京老酸奶</dd><dt>果汁</dt><dd>鲜榨苹果汁</dd>
</dl>

document对象提供的getElementById()getElementsByTagName()可以按ID获得一个DOM节点和按Tag名称获得一组DOM节点:

Cookie

document对象还有一个cookie属性,可以获取当前页面的Cookie。

Cookie是由服务器发送的key-value标示符。因为HTTP协议是无状态的,但是服务器要区分到底是哪个用户发过来的请求,就可以用Cookie来区分。当一个用户成功登录后,服务器发送一个Cookie给浏览器,例如user=ABC123XYZ(加密的字符串)...,此后,浏览器访问该网站时,会在请求头附上这个Cookie,服务器根据Cookie即可区分出用户。

Cookie还可以存储网站的一些设置,例如,页面显示的语言等等。

JavaScript可以通过document.cookie读取到当前页面的Cookie:

document.cookie; // 'v=123; remember=true; prefer=zh'

由于JavaScript能读取到页面的Cookie,而用户的登录信息通常也存在Cookie中,这就造成了巨大的安全隐患,这是因为在HTML页面中引入第三方的JavaScript代码是允许的:

!-- 当前页面在wwwexample.com -->
<html><head><script src="http://www.foo.com/jquery.js"></script></head>...
</html>

如果引入的第三方的JavaScript中存在恶意代码,则www.foo.com网站将直接获取到www.example.com网站的用户登录信息。

为了解决这个问题,服务器在设置Cookie时可以使用httpOnly,设定了httpOnly的Cookie将不能被JavaScript读取。这个行为由浏览器实现,主流浏览器均支持httpOnly选项,IE从IE6 SP1开始支持。

为了确保安全,服务器端在设置Cookie时,应该始终坚持使用httpOnly

浏览器对象模型 (BOM)相关推荐

  1. 浏览器对象模型BOM

    访问和操作浏览器窗口的模型称为浏览器对象模型BOM(Browser Object Model),但习惯上是把所有针对浏览器的JavaScript扩展都纳入BOM的范畴.BOM提供了一组独立于网页内容而 ...

  2. js笔记(四)内置对象Math和Date()、浏览器对象模型BOM

    大标题 小标题 备注 一.内置对象Math.Date() 1. Math 数学对象; 2. Date() 日期对象; 常用的数学对象:Math.PI.abs(n).round(n).random(). ...

  3. 浏览器对象模型bom的作用是什么?

    浏览器对象模型bom的作用是什么? 零.总结 1.BOM提供了独立于内容而与浏览器窗口进行交互的对象 2.BOM提供了一些访问窗口对象的一些方法,我们可以用它来移动窗口位置,改变窗口大小,打开新窗口和 ...

  4. JavaScript浏览器对象模型BOM

    JavaScript浏览器对象模型BOM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  5. 浏览器对象模型(BOM)

    BOM结构 用户浏览网页的时候,浏览器会自动创建一些对象,这些对象存放着浏览器窗口的属性和相关信息,也就是大家熟称的BOM.浏览器对象模型是一个层次化的对象集,我们可以通过window对象访问所有对象 ...

  6. 浏览器对象模型BOM学习

    BOM 浏览器对象模型 BM可以使我们通过JS来操作浏览器 在BOM中为我们提供了一组对象,用来完成对浏宽器的操作 B0M对象 Window 代表的是整个浏览器的窗口,同时window也是网页中的全局 ...

  7. 什么是BOM BOM概述 浏览器对象模型 BOM的构成

    什么是BOM BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window: BOM是由一些列相关对象构成,并且每个对象 ...

  8. 前端之浏览器对象模型(BOM)

    1.BOM 概念: BOM(Browser Object Model) 是指浏览器对象模型,浏览器对象模型提供了独立于内容的.可以与浏览器窗口进行互动的对象结构.BOM由多个对象组成,其中代表浏览器窗 ...

  9. JavaScript学习总结(一)——ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)...

    一.JavaScript简介 JavaScript是一种解释执行的脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型,它遵循ECMAScript标准.它的解释器被称为JavaScript引 ...

最新文章

  1. 笔记 | PyTorch张量Tensor的一些必备操作
  2. GIS叠加分析功能学习
  3. Android自定义控件(特效二) 点击屏幕,根据所点击的位置绘制桃心
  4. 文献记录(part49)--极大熵聚类算法的收敛性定理证明
  5. 中国首个芯片大学最快于本月底在南京挂牌;​华为方舟编译器正式支持 C 语言;Ora2Pg v21.0 发布|极客头条
  6. 循环控制语句转换为汇编
  7. [转载] python 1
  8. ITIL4 服务管理的四个维度
  9. 大学生游戏静态HTML网页作业--美丽中国
  10. 最受程序员 欢迎的14个社区
  11. 【面试题】 做了一份前端面试复习计划,保熟~
  12. ZT - 谷歌微软等三巨头掀电视革命:智能电视年底成真
  13. 我在低处仰望,梦过尘世幻想。
  14. [secureCRT] session log保存 并添加时间戳
  15. 简述使用计算机对会计工作的影响,会计电算化对会计工作的影响有哪些
  16. Mogrt是什么?如何在PR中安装.Mogrt文件并使用 Premiere基本图形MOGRT文件
  17. 基于scrapy-redis的分布式腾讯新闻爬虫
  18. SELECT连表查询重复字段
  19. antd的Table列选择、列拓展
  20. 直通车拼多多7天均价比价

热门文章

  1. Source Routing
  2. 测试用例(登录场景)
  3. 后端分页+前端分页显示(Angular+Primeng+SpringBoot)
  4. 基于STM32的0.96寸OLED显示屏显示汉字+数字
  5. 使用zbar进行二维码或条形码(一维码)扫描
  6. 如何基于声网互动白板实现一个多人数独游戏
  7. 优化策略(三)正则化和BN方式
  8. 从搜狐入侵铱迅信息网站事件,分析编码漏洞问题
  9. 基金绩效衡量指标_衡量绩效
  10. 3M公司就Amphenol公司侵犯其电缆设计专利提起诉讼