浏览器对象JS

常识

JavaScript的出现就是为了服务浏览器的运行。
主流浏览器的分类:

  1. IE 6-11:国内使用的最多的IE浏览器,对W3C标准支持差。IE10开始支持ES6。
  2. chrome:Google出品的基于Webkit内核浏览器,内置了非常强悍的JavaScript引擎——V8。最新版早就支持ES6了。
  3. Safari:Apple的Mac系统自带的基于Webkit内核的浏览器,从OS X10.7 lion自带的6.1版本开始支持ES6,目前最新的OS X 10.11EL caption自带的safari版本是9.X,早已支持ES6;
  4. Firefox:Mozilla自己研制的gecko内核和JavaScript引擎OdinMonkey。早期按版本发布,后面自更新。
  5. 移动设备上IOS和Android两大阵营分别主要使用Apple的safari和谷歌的chrome,两者都是WEBKIT核心,H5先在手机上全面普及,对JavaScript的标准支持很好,最新版本均支持ES6。

不同浏览器对JavaScript的支持有差异,主要体现在API的接口不一样,比如AJAX,FILE接口。不同浏览器对ES6标准特性支持也不一样。
在编写JavaScript的时候,要充分考虑到浏览器的差异,尽量让一份JavaScript代码能运行在不同的浏览器上。

浏览器对象

JavaScript可以获取浏览器提供的很多对象,并进行操作。

window

window对象不仅充当全局作用域,也可以表示浏览器窗口。
window对象具有innerWidth,innerHeight属性,可以获取浏览器的内部宽度和高度。内部宽高指的是出去菜单栏,工具栏,边框等占位元素后,显示网页的净高度。
outerWidth,outerHeight可以获取浏览器的整个宽高。

navigator

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

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

navigator的信息很容易被用户修改,因此通过IF语句判断浏览器版本来获取宽度信息很容易出错,且很难维护代码,此时应该利用JavaScript对于不存在的属性返回UNDEFINED的特点,使用短路运算符(或)来获取宽度信息。

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

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

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

location对象表示当前页面的URL信息。
一个完整的URL
http://www.example.com:8080/path/index.html?a=1&b=2#TOP
可以用location.href来获取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()方法。

'use strict';
if(comfirm('重新加载该页面'+location.href+'?')){
location.reload();
}else{
location.assign('/');//设置一个新的URL地址;
}
document

document对象表示当前页面。由于HTML在浏览器中以DOM形式表示为树形结构,document对象是整个DOM树的根节点。document的title属性是从HTML文档中的xxx读取的,但是可以动态改变。

'use strict'
document.title='努力学习';

要查找DOM树的某个节点,需要从document对象开始查找。最常用的查找是根据ID和TagName。
准备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节点:

var menu=document.getElementById('drink-menu');
var drinks=document.getElementsByTagName('dt');
var i,s;
s='提供的饮料有:';
for(i=0;i<drinks.length;i++){
s=s+drinks[i].innerHTML+',';
}
console.log(s);

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'

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

<!--当前页面在www.example.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。

history

history对象保存了浏览器的历史记录,JavaScript可以调用history对象的back()或forward(),相当于用户点击了浏览器的后退或前进按钮。
这个对象是历史遗留对象,对于现代web页面来说,由于大量的使用AJAX和页面交互,简单粗暴的调用history.back()可能让用户体验感不好;新手在设计web页面时喜欢在登录页面登陆成功的时候使用history.back(),试图回到登陆前的页面,这个做法很不好。尽量不要使用history对象。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值