navigator 简单介绍

下面是存在于所有浏览器中的属性和方法(注释:没有应用于 navigator 对象的公开标准,不过所有浏览器都支持该对象。):


属性:
appCodeName    返回浏览器的代码名。
appMinorVersion    返回浏览器的次级版本。
appName    返回浏览器的名称。
appVersion    返回浏览器的平台和版本信息。
browserLanguage    返回当前浏览器的语言。
cookieEnabled    返回指明浏览器中是否启用 cookie 的布尔值。
cpuClass    返回浏览器系统的 CPU 等级。
onLine    返回指明系统是否处于脱机模式的布尔值。
platform    返回运行浏览器的操作系统平台。
systemLanguage    返回 OS 使用的默认语言。
userAgent    返回由客户机发送服务器的 user-agent 头部的值。
userLanguage    返回 OS 的自然语言设置。

方法:
javaEnabled()    规定浏览器是否启用 Java。
taintEnabled()    规定浏览器是否启用数据污点 (data tainting)。

如:

console.log(window.navigator);

/*
[Log] Navigator (repetition.html, line 14)
appCodeName: "Mozilla"
appName: "Netscape"
appVersion: "5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) (Coda, like Safari)"
cookieEnabled: true
geolocation: Geolocation
language: "zh-cn"
mimeTypes: MimeTypeArray
onLine: true
platform: "MacIntel"
plugins: PluginArray
product: "Gecko"
productSub: "20030107"
userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) (Coda, like Safari)"
vendor: "Apple Computer, Inc."
vendorSub: ""
__proto__: NavigatorPrototype
*/

具体检测显示网页的浏览器类型将在下一章节讨论。

检测插件

function hasPlugin(name){
    name = name.toLowerCase();
    for (var i = 0; i < navigator.plugins.length; i ++){
        if (navigator.plugins[i].name.toLowerCase().indexOf(name) > -1){
            return true;
        }
    }
    return false;
}

上述代码在 IE 中无效。

function hasIEPlugin(name){
    try{
        new ActiveXObject(name);
        return true;
    }catch(ex){
        return false;
    }
}

上述代码用来检测 IE 中的插件,但标识符不同,如 Flash 一般为 ShockwaveFlash.ShockwaveFlash。

通用代码如下(如检测Flash):

function hasPlugin(name){
    name = name.toLowerCase();
    for (var i = 0; i < navigator.plugins.length; i ++){
        if (navigator.plugins[i].name.toLowerCase().indexOf(name) > -1){
            return true;
        }
    }
    return false;
}

function hasIEPlugin(name){
    try{
        new ActiveXObject(name);
        return true;
    }catch(ex){
        return false;
    }
}

function hasFlash(){
    var result = hasPlugin("Flash");
    if (!result){
        result = hasIEPlugin("ShockwaveFlash.ShockwaveFlash");
    }
    return result;
}

console.log(hasFlash()) //true

注册处理程序

Firefox 2 为 navigator 对象新增了 registerContentHandler()registerProtocolHandler()(这两个方法是在 HTML5 中定义的,相关内容以后讨论)

registerContentHandler()接收三个参数:要处理的 MIME 类型,可以处理该 MIME 类型的页面 URL 以及应用程序的名称。如:

navigator.registerContentHandler("application/rss+xml","http://www.somereader.com?feed=%s","Some Reader");
// 其中的 %s 表示 RSS 源 URL,由系统自动插入。

registerProtocolHandler()接收三个参数:要处理的协议(mailto 或 ftp),处理该协议的页面的 URL 和应用程序的名称。如:

navigator.registerProtocolHandler("mailto","http://www.somemailclient.com?cmd=&s","Some Mail Client");

JS菌
6.4k 声望2k 粉丝