window对象作为浏览器的全局对象、location对象保存了页面的url信息

那么navigator对象又有什么作用呢?

navigator对象

该对象最早由 Netspace Navigator 2.0 引入,用于识别浏览器客户端的事实标准

在IE中以window.clientInformation、Opera中的window.opera提供了与navigator类似的信息

但是navigator对象在所有支持JS的浏览器中都有实现,只是对某些属性,各个浏览器的实现并不一致

下面例举的属性是主流浏览器都支持的

1、appCodeName  浏览器名称,通常为 mozilla 即使在非Mozilla中的浏览器也是如此(这是因为早期浏览器竞争,浏览器所做的伪装,所以一般不使用该属性判断浏览器)

2、appName  完整浏览器名称

3、appVersion  浏览器版本

4、cookieEnabled  表示cookie是否启用

5、javaEnabled()  表示浏览器是否启用java

6、mimeTypes  表示浏览器中注册的mimeType的类型数组

7、platform  浏览器所在平台

8、plugins  浏览器安装插件的数组

9、userAgent  浏览器用户代理字符串

一般来说最常用的应该是浏览器用户代理字符串,做浏览器检测一般也是利用该属性

下面以谷歌浏览器的该对象举例

上图中黄色标出的就是主流浏览器都有的属性

检测插件

有些时候我们可能需要检测浏览器是否安装了某个插件,来进行一些对应的操作

下面例举两个检测插件的函数(出自JS高编,由于书籍版本的原因,有些方法仅供参考)

// 非IE浏览器
function hasPlugin(name){
name = name.toLowerCase;
for(var i = 0; i < navigator.plugins.legnth; i++){
if(navigator.plugins[i].name.toLowerCase().indexOf(name) > -1){
return true;
}
}
return false;
}
// IE浏览器
function hasIEPlugins(name){
try {
new ActiveXObject(name);
return true;
} catch(ex){
return false;
}
}

需要注意的地方在于IE中的name,需使用其COM标识符

而后面检测IE插件使用try-catch的原因在于,在JS中创建未知的COM对象会抛出错误

所以需要将其放入错误处理语句中使用

注册处理程序

HTML5中定义了两个注册处理程序的函数

1、registerContentHandler()

2、registerProtocolHander()

注册处理程序的函数的作用主要在于,为浏览器指定某类型文件的默认处理方式(web应用)

1、registerContentHander 该方法接收三个参数

  • RSS源的MIME类型
  • RSS源URL的URL
  • 应用程序的名称

  如:navigator.registerContentHandler("application/rss+xml","http://www.somreader.com?feed=%s","Some Reader")

2、registerProtocolHander 该方法同样接收三个参数

  • 要处理的协议
  • 处理该协议页面的url
  • 应用程序名称

  如:navigator.registerProtocolHander("mailto","http://www.somemailClient.com?cmd=%s","some mail client"); 

将一个应用程序注册为默认的邮件客户端 

Javascript高级编程学习笔记(30)—— BOM(4)navigator对象的更多相关文章

  1. Javascript高级编程学习笔记(31)—— BOM(5)screen、history对象

    screen对象 screen对象应该是BOM对象中最不常用的对象了 其主要用于提供客户端的显示能力信息 包括浏览器外部显示的信息,和像素的宽高等 这个对象的主要用于检测客户端能力,一般不会影响功能 ...

  2. Javascript高级编程学习笔记(27)—— BOM(1)window对象1

    ECMAScript是JS的核心 但是对于在浏览器中运行的JS,BOM显然才是真正的核心 我们知道JS是由三个部分组成的 BOM.DOM.ECMAScript 之前的文章我们主要介绍的是ECMAScr ...

  3. Javascript高级编程学习笔记(29)—— BOM(3)location对象

    在JS中location是一个神奇的对象 它既是window对象的属性,也是document对象的属性 它的作用主要在于保存当前文档页面的信息,以及将 url 解析为独立的片段 location对象属 ...

  4. Javascript高级编程学习笔记(28)—— BOM(2)window对象2

    今天讲一下window对象和浏览器导航,弹窗等有关的内容 导航和打开窗口 window.open() 用于导航到某个特定 url 该方法接收四个参数 1.url 2.窗口目标(当页面中有多个框架fra ...

  5. Javascript高级编程学习笔记(1)—— JS简介

    此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) E ...

  6. Javascript高级编程学习笔记(35)—— DOM(1)节点

    DOM JS由三部分组成 1.BOM 2.DOM 3.ECMAScript ES和BOM在前面的文章已经介绍过了 今天开始JS组成的最后一部分DOM(文档对象模型) 我们知道,JS中的这三个部分实际上 ...

  7. Javascript高级编程学习笔记(3)—— JS中的数据类型(1)

    前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...

  8. JavaScript高级编程学习笔记(第三章之一)

    继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...

  9. Javascript高级编程学习笔记(98)—— WebGL(4) WebGL上下文(2)

    错误 Javascript与WebGL之间的一个最大区别在于,WebGL的操作一般不会抛出错误 如果希望获取WebGL的错误信息,那么就需要手动调用  gl.getError() 方法 该方法会返回以 ...

随机推荐

  1. 'BAPI_MESSAGE_GETDETAIL' 用法

    其中message class是在se91里创建的 call function 'BAPI_MESSAGE_GETDETAIL' exporting id         = msg_class “m ...

  2. vue中具名插槽的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. leetcode26: 删除排序数组中的重复项

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1 ...

  4. 面试简单整理之mybatis

    125.mybatis 中 #{}和 ${}的区别是什么? 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解 ...

  5. [Hbase]Hbase章4 Hbase分区爆了

    又搞事了,发生了啥事呢:生产分区数暴了,What? 目前的情况: 前提:单Region Server分区上限设置为1000: 目前A表的数据量半年达到25E,20G一分区,达到了900多个分区,这是要 ...

  6. Sublime Text Snippets(代码片段)功能

    原文链接:http://www.bluesdream.com/blog/sublime-text-snippets-function.html 我们在编写代码的时候,总会遇到一些需要反复使用的代码片段 ...

  7. Python3 使用pymysql链接MySQL数据库

    1,pymysql安装 pip install pymysql 2,pymysql使用 import pymysql 3,实例查询 import pymysql #获取一个数据库链接 #格式 主机地址 ...

  8. Java和C++的数组比较

    Java:数组的定义:如下两种方式都可以:int array[];int[] array; 注意:数组在定义后,不能直接使用.必须在初始化后才能使用.初始化有两种方式:1.静态初始化:int arra ...

  9. vue路由独享守卫beforeEnter

    在某个路由中,使用beforeEnter()方法,参数是to,from,next 和全局路由守卫的用法是一样的 例子: import Vue from 'vue' import Router from ...

  10. 直播流RTMP 知识

    分享直播相关知识点: http://blog.csdn.net/kingroc/article/details/50839994 #!/bin/bash# Order Finish Startup# ...