隔了一段时间,现在开始看第8章。

第8章:BOM

  BOM提供了很多对象,用于访问浏览器的功能。BOM的核心对象是window,它表示浏览器的一个实例

  window对象是通过javascript访问浏览器窗口的一个接口,又是ECMAScript中的Global对象。

  所有在全局作用域声明的变量、函数都是window对象的属性和方法。

  1. 窗口关系,框架

    每个框架都有window对象,并在frames集合中

    每个window对象都有name属性,其中包含框架名称

    top对象始终指向最高(最外)层框架,也就是浏览器窗口

    parent对象始终指向当前框架的直接上层框架

    self对象始终指向window对象

  2. 窗口位置、视口大小

var leftPos = (typeof window.screenLeft == "number") ?   window.screenLeft : window.screenX;
var topPos = (typeof window.screenTop == "number") ? window.screenTop : window.screenY; var pageWidth = document.compatMode == "CSS1Compat" ? document.documentElement.clientWidth : document.body.clientWidth;
var pageHeight = document.compatMode == "CSS1Compat" ? document.documentElement.clientHeight : document.body.clientHeight;

  3. 打开新窗口  

function openNewWindow(){
var win = window.open('http://www.a.com/', 'aWindow', 'width=300,height=300,left=10,top=10');
win.resizeTo(500,500);
win.moveTo(100,100);
//win.close();
//win.opener = null;
}

  4. 间隔调用 超时调用

//1秒后执行 只执行一次
var timeoutId = setTimeout(function() {
alert("Hello world!");
}, 1000);
//clearTimeout(timeoutId); //每间隔1秒执行一次,直到取消
var timer = setInterval(function() {
alert("Hello world!");
}, 1000);
//clearInterval(timer); //兼容 requestAnimationFrame 用法和setTimeout类似
if (!window.requestAnimationFrame) {
window.requestAnimationFrame = (window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.oRequestAnimationFrame ||
function (callback) {
return window.setTimeout(callback, 17);
});
}
if (!window.cancelRequestAnimationFrame) {
window.cancelRequestAnimationFrame = (window.cancelAnimationFrame ||
window.webkitCancelRequestAnimationFrame ||
window.mozCancelRequestAnimationFrame ||
window.msCancelRequestAnimationFrame ||
window.oCancelRequestAnimationFrame ||
window.clearTimeout);
}

  5. 系统对话框

//alert
alert('Hello world!');
//confirm
if(confirm('are you ok?')){
//yes
}else{
//no
}
//prompt
var result = prompt("What is your name? ", "");
if(result !== null) {
alert("Welcome, " + result);
}

  6. location对象

// http://www.a.com:1234/test.html?k1=v1&k2=v2#part2

location.hash	//URL的锚部分 ( #part2 )
location.hash='#hash' //不会重新加载
location.host //URL的主机名称和端口号 location.href //完整URL location.pathname //URL的路径部分 ( /test.html )
location.port //URL的端口部分 ( 1234 )
location.protocol //URL的协议 ( http ) location.search //URL的查询部分 ( ?k1=v1&k2=v2 ) location.assign //加载一个新的文档
window.location.assign("http://www.a.com")
window.location='http://www.a.com/';
location.href='http://www.a.com/';
location.reload //重新加载当前文档
location.reload() //重新加载 可能重缓存加载
location.reload(true) //重服务器重新加载
location.replace //用一个新文档取代当前文档
location.replace('www.a.com') //不会留下历史记录 不能点击后退返回上一个页面 //转到新URL
location.assign('www.a.com')
window.location='www.a.com';
location.href='www.a.com';

  7. navigator对象 

navigator.appName //名称
navigator.appVersion //版本
navigator.appCodeName //代码名称
navigator.platform //系统平台
navigator.cookieEnabled //是否启用cookies
navigator.userAgent //浏览器用户代理头的值(只读的字符串) if(/Android|Windows Phone|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)){
location.href="http://www.a.com/";
}else if(/iPad/i.test(navigator.userAgent)){
location.href="http://www.b.com/"
}else{
location.href="http://www.c.com/"
}

  8. history对象

back() //加载历史列表中的前一个URL(如果存在)等价于点击后退按钮或调用 history.go(-1)
forward() //加载历史列表中的下一个URL 等价于点击前进按钮或调用 history.go(1)
go() //加载历史列表中的某个具体的页面 //后退一页
history.back()
history.go(-1)
//前进一页
history.forward()
history.go(1)

第9章:客户端检测

   检测web客户端的方式很多,不到万不得已不要使用客户端检测,有更通用的方法就使用更通用的方法。

   最常用的客户端检测形式是能力检测(特性检测),判断浏览器是否支持某种特性。

//基本检测格式
if(object.property){
//use object.property
} //ie判断
var isIE = !!("ActiveXObject" in window);
var isIE6 = !document.addEventListener && !window.XMLHttpRequest;
var isIE7 = isIE && !!window.XMLHttpRequest && !document.documentMode;
var isIE8 = isIE && !document.addEventListener && !!document.documentMode; if( isIE6 ) alert('你使用的是ie6浏览器')
if( isIE7 ) alert('你使用的是ie7浏览器')
if( isIE8 ) alert('你使用的是ie8浏览器')

   在可能的情况下,尽可能使用 typeof 来检测。

   用户代理检测包含大量与浏览器有关的信息。 

var ua = navigator.userAgent;
if(/Android|Windows Phone|webOS|iPhone|iPod|BlackBerry/i.test(ua)){
location.href="http://www.a.com/";
}else if(/iPad/i.test(ua)){
location.href="http://www.b.com/"
}else{
location.href="http://www.c.com/"
}

  第8章主要介绍了浏览器的window对象,window对象下的各种方法、navigator对象history对象。第9章介绍怎样检查客户端,在平常为了兼容一般都要做这样的检测。根据浏览器是否支持某个特性来检测,根据浏览器的navigator.userAgent(用户代理信息)检测。

  

  

读书时间《JavaScript高级程序设计》四:BOM,客户端检测的更多相关文章

  1. 读书笔记 - javascript 高级程序设计 - 第一章 简介

      第一章 简介   诞生时间 1995 最初用途 客服端验证 第一版标准 注意是标准 1997年 Ecma-262  一个完整的js实现由三部分组成 ECMAScript DOM 文档对象模型 BO ...

  2. 读书笔记-JavaScript高级程序设计(1)

    1.组合继承 (JavaScript 中最常用的继承模式 ) (position: page168) (书中定义了两个变量名 SuperType   SubType  乍一看 感觉不太能区分,我将改为 ...

  3. 读书笔记 - javascript 高级程序设计 - 第二章 在Html中使用JavaScript

    1 <script>的6个属性 async  立即下载当前script标签的外部脚本 但不能影响别的 charset 没用了 defer  文档显示之后再执行脚本,只对外部脚本有效 lan ...

  4. JavaScript高级程序设计(四): 关键字With的使用

    一.关键字with 1.含义    with 语句可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性.要给对象创建新的属性,必须明确地引用该对象.   简单的说,with为一个或一 ...

  5. javascript 高级程序设计 四

    新的一天开始,让我们伴随者轻快的心情,开始今天的笔记 1.操作符: (1): *./.-在ECMAScript中操作的时候,如果遇到有一个操作值不是数值型(Number),那么就会在后台调用numbe ...

  6. 读书时间《JavaScript高级程序设计》一:基础篇

    第一次看了<JavaScript高级程序设计>第二版,那时见到手上的书,第一感觉真是好厚的一本书啊.现在再次回顾一下,看的是<JavaScript高级程序设计>第三版,并记录一 ...

  7. 《JavaScript高级程序设计》读书笔记--前言

    起因 web编程过程使用javascript时感觉很吃力,效率很低.根本原因在于对javascript整个知识体系不熟,看来需要找些书脑补一下,同时欢迎众网友监督. 大神推荐书籍 看了博客大神们推荐的 ...

  8. JavaScript高级程序设计学习(四)之引用类型

    在javascript中也是有引用类型的,java同样如此. javascript常见也比较常用的引用类型就熟Object和Array. 一个对象和一个数组,这个在前后端分离开发中也用的最多.比如aj ...

  9. 读书笔记(05) - 事件 - JavaScript高级程序设计

    HTML依托于JavaScript来实现用户与WEB网页之间的动态交互,接收用户操作并做出相应的反馈,而事件在此间则充当桥梁的重要角色. 日常开发中,经常会为某个元素绑定一个事件,编写相应的业务逻辑, ...

  10. 《Javascript高级程序设计》阅读记录(二):第四章

    这个系列之前文字地址:http://www.cnblogs.com/qixinbo/p/6984374.html 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较 ...

随机推荐

  1. hdu 5056Boring count

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5056 题目大意:就是问在子串中每一个小写字母出现次数不超过k次的个数,注意子串是连续的子串.. . ...

  2. 手机游戏产品经理(一)logo的印象非常重要,以促进

    从事的工作有一段时间的产品,在产品上共享所以现在的一些经验和知识,并记录.首先,我现在做国外casino手游,如此专注casino展开游戏的主题. 首先说一款游戏的logo非常重要,假设设计的好.它能 ...

  3. 完美攻略心得之圣魔大战3(Castle Fantisia)艾伦希亚战记(艾伦西亚战记)包含重做版(即新艾伦希亚战记)

    (城堡幻想曲3,纠正大家个错误哦,不是圣魔大战3,圣魔大战是城堡幻想曲2,圣魔大战不是个系列,艾伦西亚战记==艾伦希亚战记,一个游戏日文名:タイトル キャッスルファンタジア -エレンシア戦記-リニュー ...

  4. 《Linux设备驱动开发具体解释(第3版)》进展同步更新

    本博实时更新<Linux设备驱动开发具体解释(第3版)>的最新进展. 2015.2.26 差点儿完毕初稿. 本书已经rebase到开发中的Linux 4.0内核,案例多数基于多核CORTE ...

  5. Unity3D入门(二):碰撞检測

    碰撞器由来 1.系统默认会给每一个对象(GameObject)加入一个碰撞组件(ColliderComponent),一些背景对象则能够取消该组件. 2.在unity3d中,能检測碰撞发生的方式有两种 ...

  6. 百度mp3接口

    歌曲ID 具体信息接口:http://tingapi.ting.baidu.com/v1/restserver/ting? from=android&version=2.4.0&met ...

  7. HDU5086Revenge of Segment Tree(数论)

    HDU5086Revenge of Segment Tree(数论) pid=5086" target="_blank" style="">题目 ...

  8. hibernate学习——Set集合配置

    Set集合的配置 数据表的创建:表关系一个员工拥有多个身份 create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VAR ...

  9. HDU 1201

    18岁生日 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  10. APUE读书笔记-第13章-守护进程

    第13章 守护进程 13.1 引言 *守护进程也称精灵进程(daemon)是生存期较长的一种进程.它们常常在系统自举时启动,仅在系统关闭时才终止.因为它们没有控制终端,所以说它们是在后台运行的.UNI ...