zoukankan      html  css  js  c++  java
  • Js之Navigator对象

    Window对象的navigator属性引用的是包含浏览器厂商和版本信息的Navigator对象。Navigator对象的命名是为了纪念Netscape之后NavigatorBU览器译注2,不过所有其他的浏览器也支持它(IE还支持clientln formation属性,它作为navigator的厂商中立同义
    词。遗憾的是,其他浏览器并不支持这一更直观的属性命名)。过去,Navigator对象通常被脚本用来确定它们是在IE中还是在Netscape中运行。这种浏览器嗅探方法有问题,因为它要求随着新浏览器和现有浏览器的新版本的引入而不断地
    调整。如今,有一种更好的功能测试方法(参见13.4.3节),只需要测试所需要的功能(即,方法或属性),而不是偎设特定的浏览器版本及其功能。然而,浏览器嗅探有时候仍然有价值。这样的一种情况是,当需要解决存在于某个特定
    的浏览器的特定版本中的特殊的bug时。Navigator对象有4个属性用于提供关于运行中的浏览器的版本信息,并且可以使用这些属性进行浏览器嗅探。

    appName
    Web浏览器的全称。在IE中,这就是“Microsoft Internet Explorer”。在Firefox中,该属性就是“Netscape”。为了兼容现存的浏览器嗅探代码,其他浏览器通常也取值为“Netscape”。
    appVersion
    此属性通常以数字开始,并跟着包含浏览器厂商和版本信息的详细字符串。字符串前面的数字通常是4.0或5.0,表示它是第4或第5代兼容的浏览器。appVersion字符串没有标准的格式,所以,没有办法直接用它来判断浏览器的类型。
    userAgent
    浏览器.在它的USER-AGENT HTTP头部中发送的字符串。这个属性通常包含appVersion中的所有信息,并且常常也可能包含其他的细节。和appVersion-样,它也没有标准的格式。由于这个属性包含绝大部分信息,因此浏览器嗅探代码通常用它来嗅探。
    platform
    在其上运行浏览器的操作系统(并且可能是硬件)的字符串。Navigator属性的复杂性正说明了浏览器嗅探对于处理客户端兼容性问题是没有太大帮助的。在Web的早期,人们写了大量的浏览器特定代码用于测试类似于navigator.appName
    的属性。在开发新浏览器的时候,浏览器厂商发现为了让现有网站显示正确,它们需要把appName设置为“Netscape”。类似的做法使得appVersion的起始数字失去了意义,而现在的浏览器嗅探代码必须要依赖于比之前复杂很多的navigator.userAgent字符串。
    例14-3展示了如何用正则表达式(摘自iQuery)从navigator.userAgent中抽取浏览器名称和版本号的方法。

    例14-3:使用navigator.userAgent~-进行浏览器嗅探
    //为客户端嗅探定义browser.name和browser.version,这里使用了jOuery l.4.1中的代码
    //name和number都是字符串,对于不同的浏览器输出的结果也是不一样的,检测结果如下:
    J|
    //”webkit":Safari或Chrome;版本号是Webkit的版本号
    //”opera": Opera;版本号就是软件的版本号
    //“mozilla":Firefox或者其他基于gecko内核的浏览器;版本号是Gecko的版本
    //”msie":IE;版本号就是软件的版本
    ||
    //比如Firefox 3.6返回:{name: "mozilla", version: "1.9.2"}
    var browser=(function(){
    var s=navigator.userAgent.toLowerCase();
    var match=/(webkit)[\/]([\w.]+)/.exec(s) ||
    /(opera)(?: .*version)?[\/]([\w.]+)/.exec(s) ||
    /(msie)([\w.]+)/.exec(s) ||
    /compatible/.test(s)&&/(mozilla)(?:.*rv:([\w.]+))?/.exec(s)I l
    [];
  • 相关阅读:
    js最全的十种跨域解决方案
    最常用的~正则表达式相关js函数知识简洁分享【新手推荐】
    HTTP请求 响应状态码
    堆和栈的区别【以java为例潜入分析】
    练习110 编写一个将输入复制到输出的程序,并将其中的制表符替换成\t,把回退符替换成\b,把反斜杠替换成\\,这样可以将制表符和回退符以可见的方式显示出来
    练习111 你准备如何测试单词计数程序? 如果程序中存在某种错误,那么什么样的输入最可能发现这类错误?
    练习114 编写一个程序, 打印输入中各个字符出现频度的直方图。
    The C programming language Test
    进驻首日..感谢师父的教导
    练习112:编写一个程序,以每行一个单词的形式打印其输入。
  • 原文地址:https://www.cnblogs.com/agindage/p/4693859.html
Copyright © 2011-2022 走看看