《JS高程(3)》BOM-03(navigation)-第8章筆記(08)

識別客戶端瀏覽器的事實標準,是所有支持JavaScript的瀏覽器所共有的。

屬性或方法 說明
appCodeName 瀏覽器名稱。通常是Mozilla
appName 完整的瀏覽器名稱
appMinorVersion 次版本信息
appVersion 瀏覽器的版本。一般不與實際的瀏覽器版本對應
buildID 瀏覽器編譯版本
cookieEnabled 表示cookie是否啓用
cpuClass 客戶端計算機中使用的CPU類型(x86,68K,Alpha,PPC或Other)
javaEnabled() 表示當前瀏覽器中是否啓用Java
language 瀏覽器的住語言
mimeTypes 在瀏覽器中註冊的MIME類型數組
onLine 表示瀏覽器是否連接到了因特網
Platform 瀏覽器所在的系統平臺
plugins 瀏覽器中安裝的插件信息的數組
userAgent 瀏覽器的用戶代理字符串

檢測插件

檢測瀏覽器中是否安裝了特定的插件。
方法:plugins[i];
每個數組中的包含的屬性

鍵名 鍵值
name: 插件的名字
description: 插件的描述
filename: 插件的文件名
length: 插件所處理的MIME類型數量

Firefox ,Safari,Opera和Chrome使用:

function hasPlugin(name){
    //轉換爲小寫
    name = name.toLowerCase();
    for(var i = 0; i<navigator.plugins.length; i++){
    // 迭代plugins數組,通過indexof()檢測每個name屬性
    if(navigator.plugins[i].name.toLowerCase().indexOf(name)>-1){
            return true;
        }
    }
    return false;
}
//檢測Flash
alert(hasPlugin("Flash"));// true

//檢測QuickTime
alert(hasPlugin("QuickTime"));//false

IE中使用:

function hasIEPlugin(name){
    // 在try-catch中實例化,因創建未知COM對象會拋出錯誤。
    try{
        new ActiveXObject(name);
        return true;
    } catch (ex){
        return false;
    }
}
//檢測Flash
alert(hasPlugin("ShockwaveFlash.ShockwaveFlash"));// true

//檢測QuickTime
alert(hasPlugin("QuickTime.QuickTime"));//false

在IE中檢測插件的唯一方式就是使用專有的ActiveXObject類型,並創建特定插件的實例。以COM對象的方式實現插件,而COM對象使用唯一標識符來標識。因此要檢查特定的插件,就必須知道其COM標識符。Flash的標識符是ShockwaveFlash.ShockwaveFlash。

兩種方法合併使用,使用判斷所有類型的瀏覽器是否安裝了特定插件:

// 檢測所有瀏覽器中的Flash
function hasFlash()
    var result = hasPlugin("Flash");
    //先判斷在非IE瀏覽器,返回false的話再使用IE插件檢測方法,若繼續返回false,則不存在。
    if(!result){
        result = hasIEPlugin("ShockwaveFlash.ShockwaveFlash");
    }
    return result;
}
// 檢測所有瀏覽器中的QuickTime
function hasQuickTime(){
    var result = hasPlugin("QuickTime");
    if(!result){
        result = hasIEPlugin("QuickTime.QuickTime");
    }
    return result;
}

//檢測Flash
alert(hasFlash);// true

//檢測QuickTime
alert(hasQuickTime);//false
註冊處理程序

註冊處理程序就爲像使用桌面應用程序一樣默認使用這些在線應用程序提供了一種方式。
指明一個站點可以處理特定類型的信息:
registerContentHandler()方法:接受3個參數:要處理的MIME類型,可以處理該MIME類型的頁面的URL以及應用程序的名稱。
講一個站點註冊爲處理RSS(簡單信息聚合,個人認爲是根據個人要求定製的信息整合推送服務)源的處理程序:

navigator.registerContentHandler(
    //RSS源的MIME類型
     "application/rss+xml",
     //接收RSS源URLURL。%s表示RSS源URL,下一次請求RSS源時,瀏覽器就會打開指定的URL而相應的Web應用程序將以適當方式來處理該請求。
     "http://www.somereader.com?feed=%s", 
     //應用程序的名稱。
     "Some Reader");

registerProtocolHandler()方法:接受3個參數:要處理的協議,處理該協議的頁面的URL以及應用程序的名稱。

navigator.registerProtocolHandler(
    "mailto",
    "http://www.somemailclient.com?cmd=%s", 
    "Some Mail Client"
);

註冊了一個mailto協議的處理程序,改程序指向一個基於Web的電子郵件客戶端。第二個參數仍然是處理相應請求的URL,而%s則表示原始的請求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章