一 接口定义的属性和方法
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"
)