BOM之navigator对象

一 接口定义的属性和方法

navigator对象的属性通常用于确定浏览器的类型

  • NavigatorID
  • NavigatorLanguage
  • NavigatorOnLine
  • NavigatorContentUtils
  • NavigatorStorage
  • NavigatorStorageUtils
  • NavigatorConcurrentHardware
  • NavigatorPlugins
  • NavigatorUserMedia

 二 使用场景

场景一:检测插件

作用:检测浏览器是否安装了某个插件

属性:

  • name: 插件名称
  • description:插件介绍
  • filename:插件的文件名
  • length:由当前插件处理的MIME类型数量

程序实现:检测插件

思路:遍历浏览器中可用的插件,并逐个比较插件的名称

使用场景: 可以在Firefox、Safari、Opera、Chrome中检测插件

较新版本浏览器的检测:

let hasPlugin = function(name) {
    // name为待检测插件的名称,把插件名称转换为小写形式,便于比较
    name = name.toLowerCase();
    for(let plugin of window.navigator.plugins) {
        // console.log('window.navigator.plugins: ', window.navigator.plugins);
        if(plugin.name.toLowerCase().indexOf(name) > -1) {
            return true;
        }
    }
    return false;
}

console.log(hasPlugin("Flash"));//false
console.log(hasPlugin("QuickTime"));//false

plugins数组中的每个插件对象有一个MimeType对象,可以通过中括号访问

 MimeType对象有4个属性:

  • description:描述MIME类型
  • enabledPlugin:指向插件对象的指针
  • suffixes:该MIME类型对应扩展名的逗号分隔的字符串
  • type:完整的MIME类型字符串

旧版本IE中的插件检测:

思路:IE10及更低版本中检测要使用专有的ActiveXObject,需要尝试实例化特定的插件

IE中的插件是实现为COM对象的,由唯一的字符串标识

重点:要检测某个插件就必须知道其COM标识符

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

console.log("ShockwaveFlash.ShockwaveFlash");
console.log('QuickTime.QuickTime');

总结:检测插件涉及两种方式,一般要针对特定插件写一个函数,而不是用通常的检测函数

// 在所有浏览器中检测Flash
function hasFlash(){
    var result = hasPlugin("Flash");
    if(!result){
        result = hasIEPlugin("ShockwaveFlash.ShockwaveFlash")
    }
    return result;
}


// 在所有浏览器中检测QuickTime
function hasQuickTime(){
    var result = hasPlugin("QuickTime");
    if(!result){
        result = hasIEPlugin("QuickTime.QuickTime")
    }
    return result;
}

plugins有一个refresh()方法,用于刷新plugins属性以反映新安装的插件

参数:布尔值参数,表示刷新时是否重新加载页面

传true: 所有包含插件的页面都会重新加载

传false:只有plugins会更新,但页面不会重新加载

场景二:注册处理程序

 现代浏览器上(在HTML5中定义的)支持navigator的registerProtocolHandler()方法

作用:可以把一个网站注册为处理某种特定类型信息应用程序

参数:必须传入3个

  • 要处理的协议
  • 处理该协议的URL
  • 应用名称
navigator.registerProtocolHandler(
    "mailto",
    "http://www.somemailclient.com?cmd=%s",
    "Some Mail Client"
)

猜你喜欢

转载自blog.csdn.net/xiaoyangzhu/article/details/121700232
今日推荐