說說 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 才完全實現了這個方法。
相關推薦
認識Javascript中的navigator物件以及檢測瀏覽器型別和版本,獲取瀏覽器版本號,檢測客戶端作業系統
Navigator物件包含了Web瀏覽器的基本資訊(如名稱,版本,作業系統等) 通過window.navigator方式可以引用該物件,並利用它的屬性讀取客戶端基本資訊 Navigator的5個主要屬性: appName:Web瀏覽器的名稱 appVersion:瀏覽器的
說說 JavaScript 中 BOM 的 navigator 物件
navigator 物件已成為識別客戶端瀏覽器的事實標準。但每一種瀏覽器的 navigator 物件都有自己的屬性: 屬性或方法 說明 IE Firefox Safari/Chrome Opera appCodeName
BOM中的navigator物件
<!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) {
JavaScript中BOM的重要內容總結
一、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 =
【JavaScript】BOM—瀏覽器物件
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)
javascript中new Date()物件和getTime()方法的問題(又是來提問,(-__-)b)
昨天到現在一直在完成一個用canvas實現的倒計時的小案列,用到Date物件和getTime方法來計算倒計時的時間。老是有問題,不知道怎麼回事。貼error: 昨天是2016年7月18日 endTim
通過一道筆試題淺談javascript中的promise物件
因為前幾天做了一個promise物件捕獲錯誤的面試題目,所以這幾天又重溫了一下promise物件。現在借這道題來分享下一些很基礎的知識點。 下面是一個面試題目,三個promise物件捕獲錯誤的例子,返回結果有什麼不同。 //使用throw新增錯誤事件 var p =
JavaScript中的陣列物件屬性和方法!
日常程式碼中經常會對程式碼進行一些操作,複製、排序、查詢、遍歷等等,一些陣列的方法總是記不住,所以寫篇日記總結一下。 1. 陣列的建立與賦值 建立一個數組,有三種方法。 下面的程式碼定義了一個