《JS高程(3)》BOM-03(navigation)-第8章笔记(08)

识别客户端浏览器的事实标准,是所有支持JavaScript的浏览器所共有的。

属性或方法 说明
appCodeName 浏览器名称。通常是Mozilla
appName 完整的浏览器名称
appMinorVersion 次版本信息
appVersion 浏览器的版本。一般不与实际的浏览器版本对应
buildID 浏览器编译版本
cookieEnabled 表示cookie是否启用
cpuClass 客户端计算机中使用的CPU类型(x86,68K,Alpha,PPC或Other)
javaEnabled() 表示当前浏览器中是否启用Java
language 浏览器的住语言
mimeTypes 在浏览器中注册的MIME类型数组
onLine 表示浏览器是否连接到了因特网
Platform 浏览器所在的系统平台
plugins 浏览器中安装的插件信息的数组
userAgent 浏览器的用户代理字符串

检测插件

检测浏览器中是否安装了特定的插件。
方法:plugins[i];
每个数组中的包含的属性

键名 键值
name: 插件的名字
description: 插件的描述
filename: 插件的文件名
length: 插件所处理的MIME类型数量

Firefox ,Safari,Opera和Chrome使用:

function hasPlugin(name){
    //转换为小写
    name = name.toLowerCase();
    for(var i = 0; i<navigator.plugins.length; i++){
    // 迭代plugins数组,通过indexof()检测每个name属性
    if(navigator.plugins[i].name.toLowerCase().indexOf(name)>-1){
            return true;
        }
    }
    return false;
}
//检测Flash
alert(hasPlugin("Flash"));// true

//检测QuickTime
alert(hasPlugin("QuickTime"));//false

IE中使用:

function hasIEPlugin(name){
    // 在try-catch中实例化,因创建未知COM对象会抛出错误。
    try{
        new ActiveXObject(name);
        return true;
    } catch (ex){
        return false;
    }
}
//检测Flash
alert(hasPlugin("ShockwaveFlash.ShockwaveFlash"));// true

//检测QuickTime
alert(hasPlugin("QuickTime.QuickTime"));//false

在IE中检测插件的唯一方式就是使用专有的ActiveXObject类型,并创建特定插件的实例。以COM对象的方式实现插件,而COM对象使用唯一标识符来标识。因此要检查特定的插件,就必须知道其COM标识符。Flash的标识符是ShockwaveFlash.ShockwaveFlash。

两种方法合并使用,使用判断所有类型的浏览器是否安装了特定插件:

// 检测所有浏览器中的Flash
function hasFlash()
    var result = hasPlugin("Flash");
    //先判断在非IE浏览器,返回false的话再使用IE插件检测方法,若继续返回false,则不存在。
    if(!result){
        result = hasIEPlugin("ShockwaveFlash.ShockwaveFlash");
    }
    return result;
}
// 检测所有浏览器中的QuickTime
function hasQuickTime(){
    var result = hasPlugin("QuickTime");
    if(!result){
        result = hasIEPlugin("QuickTime.QuickTime");
    }
    return result;
}

//检测Flash
alert(hasFlash);// true

//检测QuickTime
alert(hasQuickTime);//false
注册处理程序

注册处理程序就为像使用桌面应用程序一样默认使用这些在线应用程序提供了一种方式。
指明一个站点可以处理特定类型的信息:
registerContentHandler()方法:接受3个参数:要处理的MIME类型,可以处理该MIME类型的页面的URL以及应用程序的名称。
讲一个站点注册为处理RSS(简单信息聚合,个人认为是根据个人要求定制的信息整合推送服务)源的处理程序:

navigator.registerContentHandler(
    //RSS源的MIME类型
     "application/rss+xml",
     //接收RSS源URLURL。%s表示RSS源URL,下一次请求RSS源时,浏览器就会打开指定的URL而相应的Web应用程序将以适当方式来处理该请求。
     "http://www.somereader.com?feed=%s", 
     //应用程序的名称。
     "Some Reader");

registerProtocolHandler()方法:接受3个参数:要处理的协议,处理该协议的页面的URL以及应用程序的名称。

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

注册了一个mailto协议的处理程序,改程序指向一个基于Web的电子邮件客户端。第二个参数仍然是处理相应请求的URL,而%s则表示原始的请求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章