1. 程式人生 > >說說 JavaScript 中 BOM 的 navigator 物件

說說 JavaScript 中 BOM 的 navigator 物件

navigator 物件已成為識別客戶端瀏覽器的事實標準。但每一種瀏覽器的 navigator 物件都有自己的屬性:

屬性或方法 說明 IE Firefox Safari/Chrome Opera
appCodeName 瀏覽器名稱。通常是 Mozilla 3.0+ 1.0+ 1.0+ 7.0+
appMinorVersion 次版本資訊 4.0+ - - 9.5+
appName 瀏覽器的完整名稱 3.0+ 1.0+ 1.0+ 7.0+
appVersion 瀏覽器版本,不與實際版本對應 3.0+ 1.0+ 1.0+ 7.0+
buildID 瀏覽器的編譯版本 - 2.0+ - -
cookieEnabled cookie 是否啟用 4.0+ 1.0+ 1.0+ 7.0+
cpuClass 客戶端的計算機使用的 CPU 型別 4.0+ - - -
javaEnabled() 瀏覽器是否啟用了 Java 4.0+ 1.0+ 1.0+ 7.0+
language 瀏覽器的主語言 - 1.0+ 1.0+ 7.0+
mimeTypes 註冊的 MIME 型別陣列 4.0+ 1.0+ 1.0+ 7.0+
onLine 是否連線了網路 4.0+ 1.0+ - 9.5+
oscpu 客戶端的計算機使用的 CPU 型別 - 1.0+ - -
Platform 瀏覽器所在的系統平臺 4.0+ 1.0+ 1.0+ 7.0+
Plugins 瀏覽器中安裝的外掛資訊的陣列 4.0+ 1.0+ 1.0+ 7.0+
preference() 使用者首選項 - 1.5+ - -
product 產品名稱 - 1.0+ 1.0+ -
productSub 產品的次要資訊 - 1.0+ 1.0+ -
register-ContentHandler() 針對特定的 MIME 型別將一個站點註冊為處理程式 - 2.0+ - -
register-ProtocolHandler() 針對特定的協議將一個站點註冊為處理程式- 2.0 - -
systemLanguage 作業系統的語言 4.0+ - - -
userAgent 瀏覽器的使用者代理字串 3.0+ 1.0+ 1.0+ 7.0+
userLanguage 作業系統的預設語言 4.0+ - - 7.0+
userProfile 訪問使用者個人資訊的物件 4.0+ - - -
vendor 瀏覽器供應商資訊 - 1.0+ 1.0+ -
vendorSub 瀏覽器供應商的次要資訊 - 1.0+ 1.0+ -

1 檢測外掛

對於非 IE 瀏覽器,可以使用 plugins 陣列來檢測外掛,陣列的每一項都包含這些屬性:

屬性名 說明
name 外掛的名字
description 外掛的描述
filename 外掛的檔名
length 外掛所處理的 MIME 型別數量
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;
}

//檢測 Flash
console.log(hasPlugin("Flash"));

//檢測 QuickTime
console.log(hasPlugin("QuickTime"));

將比較的字串都使用小寫形式,這樣可以避免大小寫不一致導致的錯誤。

IE 必須使用專有的 ActiveXObject 型別。因為 IE 是以 COM 物件的方式實現的外掛,所以必須知道要檢測外掛的 COM 識別符號:

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

//檢測 Flash
console.log(hasIEPlugin("ShockwaveFlash.ShockwaveFlash"));

//檢測 QuickTime
console.log(hasIEPlugin("QuickTime.QuickTime"));

因此,跨瀏覽器的通用檢測方法如下:

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;
    }
}

//檢測所有瀏覽器中的 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;
}


//檢測 Flash
console.log(hasFlash());

//檢測 QuickTime
console.log(hasQuickTime());

因為非 IE 和 IE 的外掛檢測方法相差較大,所以我們針對每個外掛分別建立檢測函式。

注意: plugins 集合有一個 refresh() 方法,它用於重新整理 plugins 集合來反映最新外掛的安裝情況。它有一個 boolean 引數,如果為 true,就會重新載入包含外掛的所有頁面;否則只更新集合。

2 註冊處理程式

Firefox 2 為 navigator 物件新增了兩個方法,它們都可以讓一個站點指明它可以處理的特定型別資訊。主要用於 RSS 閱讀器和線上電子郵件程式。

registerContentHandler() 有三個引數:

  • 要處理的 MIME 型別
  • 可以處理該 MIME 型別的 URL
  • 應用程式名稱

比如,要將一個站點註冊為處理 RSS 源的處理程式:

navigator.registerContentHandler("application/rss+xml","http://www.xxx.com?feed=%s","xxx");

registerProtocolHandler() 有三個引數:

  • 要處理的協議
  • 可以處理該協議的 URL
  • 應用程式名稱

比如將一個應用程式註冊為預設的郵件客戶端:

navigator.registerProtocolHandler("mailto","http://www.xxx.com?cmd=%s","xxx");

注意: Firefox 2 雖然實現了 registerProtocolHandler(),但還不能使用。直到 Firefox 3 才完全實現了這個方法。

相關推薦

認識Javascriptnavigator物件以及檢測瀏覽器型別和版本,獲取瀏覽器版本號,檢測客戶端作業系統

Navigator物件包含了Web瀏覽器的基本資訊(如名稱,版本,作業系統等) 通過window.navigator方式可以引用該物件,並利用它的屬性讀取客戶端基本資訊 Navigator的5個主要屬性: appName:Web瀏覽器的名稱 appVersion:瀏覽器的

說說 JavaScript BOMnavigator 物件

navigator 物件已成為識別客戶端瀏覽器的事實標準。但每一種瀏覽器的 navigator 物件都有自己的屬性: 屬性或方法 說明 IE Firefox Safari/Chrome Opera appCodeName

BOMnavigator物件

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> &

JavaScript的Date物件在Safari與IOS 日期出錯

首先我需要的展示的時間格式是這樣的2018/03/06 下面這個是開始時間 replace(/\-/g, "/"); 轉化成我想要的格式 $scope.endtime = $stateParams.endtime.replace(/\-/g, "/"); 下面這個是結束時間&n

JavaScript的window物件 (狀態列動態文字例項)

window物件在js中經常會提到, 在具體瞭解之前經常會感覺疑惑, window到底是個啥, 這篇就是用來介紹window給和我一樣的菜鳥 Window - 瀏覽器物件模型 為什麼說瀏覽器物件呢? 因為window物件它表示瀏覽器窗口或一個框架, 與windows作業系統沒啥關係

javascript 獲取json物件的鍵構成的陣列

<!DOCTYPE html> <html>     <head>         <meta charset="utf-8">    &nb

Javascript 的Object物件

Object:物件屬於複合的資料型別,在物件中可以儲存多個不同資料型別的屬性。 物件是動態的,可以新增屬性也可以刪除屬性。 物件的常見用法: 建立、設定、查詢、刪除、檢測、列舉 物件的分類: 1.內建物件:是由ECMAScript規範定義的物件。如:陣列、函式、日期和正則表示式。 2.宿主物

javascript怎麼判斷物件{}為空

時候通過AJAX方法呼叫返回的是一個JSON物件,而這個物件可能在開發過程中會沒有資料是一個空{}。 JavaScript判斷object/json 是否為空,可以使用jQuery的isEmptyObject()方法。 function isEmptyObject(obj) {

JavaScriptBOM的重要內容總結

一、BOM介紹   BOM(Browser Object Model),瀏覽器物件模型;   用來操作瀏覽器部分功能的API;   BOM由一系列的物件構成,由於主要用於管理視窗和視窗之間的通訊,所以核心物件是window。   二、BOM的結構   BOM中,主要是物件。比如:移動、調

javascript 獲取json物件的鍵構成的陣列

<!DOCTYPE html> <html>     <head>         <meta charset="utf-8">         <title></title>     </head

javascript的window物件的知識點

javascript中的window物件的知識點 內建物件定義:可以不需要宣告和建立,可以直接使用,內建物件全部為javascript關鍵字 window是內建物件,因為window使用的太頻繁了,所以一般window可以省略不寫,我們平時用的alert()其本質就是window.ale

JavaScript 建立一個物件

在JavaScript當中建立一個物件有兩種語法, 一種是通過字面量的形式,另外一種是通過new Object()的形式 建立一個person物件 它有 name,age,sex等屬性。 1.字面量形式(literal syntax) var person =

JavaScriptBOM—瀏覽器物件

1、window物件 document 獲取物件事件 //這倆種方式相同 window.document.getElementById("###"); document.getElementById("

javascript對一個物件陣列按照物件某個屬性進行排序

在javascript中,物件和陣列是兩種不同的型別,這和php中的陣列概念不同。在javascript中,也有一些精妙的演算法,用來對一些物件進行排序。我在面試迅雷的時候,也拿到一道題,當時做題的時候考慮到時間,沒有去仔細研究,回來後再讀了一些方法,就知道真正的考點在哪裡了。 我們現在有一組“學

JavaScript 1.7 navigator物件

一、屬性及方法示例 <script> document.write("瀏覽器的程式碼名:" + navigator.appCodeName + "<br>"); document.write("瀏覽器的名稱:" + navigator.appName +

javascript函式、物件、原型鏈等的深入自我理解

js中以物件為核心,所有皆物件。 狹義的講,js中的物件比較純粹,就是一個大括號包裹的鍵值對,鍵為名(有待深入解析,可能就是語法本身),值為物件。 這個基本要素和C++比較接近,並沒有憑空創造出新的語法來完成這個物件(類)的構造過程。 函式本身是物件,可以作為物件中的值

原生javascript的arguments物件的重要應用

在arguments中,存在函式中、第1個引數的屬性名是’0’,第2個引數的屬性名是’1’,以此類推,並且它還有length屬性,儲存的是當前傳入函式引數的個數,很多時候我們把這種物件叫做類陣列物件(偽陣列) function test (a,b,c){ console.log(a,b,c)

javascriptnew Date()物件和getTime()方法的問題(又是來提問,(-__-)b)

昨天到現在一直在完成一個用canvas實現的倒計時的小案列,用到Date物件和getTime方法來計算倒計時的時間。老是有問題,不知道怎麼回事。貼error: 昨天是2016年7月18日 endTim

通過一道筆試題淺談javascript的promise物件

因為前幾天做了一個promise物件捕獲錯誤的面試題目,所以這幾天又重溫了一下promise物件。現在借這道題來分享下一些很基礎的知識點。 下面是一個面試題目,三個promise物件捕獲錯誤的例子,返回結果有什麼不同。 //使用throw新增錯誤事件 var p =

JavaScript的陣列物件屬性和方法!

日常程式碼中經常會對程式碼進行一些操作,複製、排序、查詢、遍歷等等,一些陣列的方法總是記不住,所以寫篇日記總結一下。 1. 陣列的建立與賦值 建立一個數組,有三種方法。 下面的程式碼定義了一個