JavaScript高级程序设计19.pdf

注册处理程序

navigator.registerContentHandler("applicat/rss+xml","http://www.somereader.com?feed=&s","Some Reader");

screen对象

JavaScript中有几个对象在编程中用处不大,而screen对象就是其中之一。screen对象基本是用来表明客户端的能力,每个浏览器中的screen对象包含着各不相同的属性

history对象

history对象保存着用户的上网记录,因为history是window对象的属性,因此每个浏览器窗口每个标签页每个框架都有自己的history对象与特定的window对象关联

使用go()可以在用户的历史记录中任意跳转

history.go(-1);  //后退一页

history.go(1);  //前进一页

也可以传递一个字符串参数,浏览器会跳转到包含该字符串的页面(可能往前也可能往后),如果没有包含这个字符串的页面则什么都不做

history.go("wrox.com");  //跳转到最近的wrox.com页面

 

//模拟浏览器的前进后退

history.back();

history.forward();

history.length保存了所有历史记录,即所有向前和向后的记录,history.length==0代表用户一打开浏览器就打开了你的页面

第九章 客户端检测

能力检测

 IE5.0之前的版本不支持document.getElementsById()这个DOM方法,可以使用费标准的document.all属性实现相同的目的,于是

function getElement(id){

  if(document.getElementsById){

    return document.getElementsById(id);

  }else if (document.all){

    return document.all[id];

  }else{

    throw new Error("No way to retrieve element!");

  }

}

将达到目的更常用的方法放在检测的前面可以避免测试多个条件

更可靠的能力检测

 大多数浏览器用typeof在检测到document.createElement()时都会返回true,在IE8及之前的版本中返回的是"Object",而不是"function"。由于DOM是宿主对象,IE早期版本中是通过COM而非Jscript实现的,IE9以后纠正了这个问题,对所有DOM对象都返回"function"

//在IE中会导致错误

var xhr=new ActiveXObject("Microsoft.XMLHttp");

if(xhr.open){  //这里会发生错误

  //执行操作

}

像这样直接把函数作为属性访问会导致JavaScript错误,使用typeof更靠谱一些,但IE对typeof xhr.open会返回"unknow"

在浏览器环境下测试任何对象的某个特性是否存在,可以使用下列函数

function isHostMethod(object,property){

  var t=typeof Object[property];

  return t="function"(!!(t=='object' && object[property])) t=='unknow';

}

能力检测,不是浏览器检测

//确定浏览器是否支持Netscape风格的插件

var hasNSPlugins=!!(navigator.plugins && navigator.plugins.length);

怪癖检测

怪癖检测的目标是识别浏览器的特殊行为

IE8以及之前版本有个bug,即如果某个实例属性与标记为[[Enumerable]]的某个原型属性同名,那么该实例属性将不会出现在for-in循环中

var hasDontEnumQuirk=function(){

    var o={toString:function(){}};

    for(var prop in o){

      if(prop=="toString"){

        return false;

        }

      }

    return true;

    }();

另一个需要检测的怪癖是Safari3以前的版本会枚举被隐藏的属性

var hasEnumShadowsQuirk=function(){

    var o={toString:function(){}};

    var count=0;

    for(var prop in o){

      if(prop=="toString"){

        count++;

        }

      }

     return (count>1);

    }();

如果存在这个bug,for-in循环会返回两个toString属性(一个来自实例,一个来自原型)

更多相关文章
  • 第六章 面向对象的程序设计 ECMA中有两种属性:数据属性和访问器属性 数据属性的特性 [[Configurable]] 表示是否通过delete删除属性,是否重新定义属性,是否能把属性修改为访问器属性 [[Enumerable]] 表示是否通过for-in循环返回属性 [[writable]] 表 ...
  • Number是数字值对应的引用类型 var numberObject=new Number(10); Number也重写了valueof().toLocaleString().和toString()方法,valueOf()方法返回对象表示的基本类型数值,另外两个方法则返回字符串形式的数值,除了继承的 ...
  • JavaScript高级程序设计(第2版) 笔记1
    JavaScript高级程序设计这本书以前一个朋友推荐我看,可惜因为种种原因,都没有系统地拜读全书.最近一段时间刚好有这个时间,也就再次捧起,有一段时间没有阅读技术类的书籍,读起来感觉有点乏味了...... 而说到JavaScript确实一门不错的语言(注:PHP的不要喷我!),不过我相信很多人都同 ...
  • JavaScript高级编程II
         原文地址: http://www.onlamp.com/pub/a/onlamp/2007/08/23/advanced-javascript-ii.html?page=1        在前面的文章中,我们介绍了两类JavaScript小工具及其源代码:浮动文本和弹出菜单.本文中,我们将 ...
  • 一:HTML4.01为<script>标签定义了6个属性: async: 表示应该立即下载脚本,但不应该妨礙页面中其他操作——————只对外部脚本有效: charset: 表示通过src属性指定的代码的字符集—————————————很少用: defer: 表示脚本可以延迟到文档完全被解 ...
  • 推荐分享大量JavaScript/jQuery电子书籍教程pdf合集下载
    不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小   15天学会jQuery(完整版).pdf 274.79 KB   21天学通JavaScript(第2版)-顾宁燕扫描版.pdf 26.02 MB   5天驾驭JQuery教程.pdf 1.08 MB   ACCP软件开发初级程 ...
  • 給JavaScript初學者的24條最佳實踐(轉:http://www.cnblogs.com/yanhaijing/p/3465237.html)
    作为“30 HTML和CSS最佳实践”的后续,本周,我们将回顾JavaScript的知识 !如果你看完了下面的内容,请务必让我们知道你掌握的小技巧! 1.使用 === 代替 == JavaScript 使用2种不同的等值运算符:===!== 和 ==!=,在比较操作中使用前者是最佳实践. “如果两边
  • 給JavaScript初學者的24條最佳實踐(share)
    不错的文章,留个备份   原文链接: net.tutsplus   翻译: 伯乐在线 - yanhaijing译文链接: http://blog.jobbole.com/53199/ 作为“30 HTML和CSS最佳实践”的后续,这篇文章将回顾JavaScript的知识 !如果你看完了下面的内容,请
一周排行