淺談瀏覽器插件檢測 和自定義協議的支持


前一陣子一直在折騰瀏覽器的插件檢測和自定義協議的支持。

經過種種痛苦的折騰,算是對這一領域有了點淺顯的認知。特此記錄一下

 

一、背景知識
自定義協議:常用的協議有 http:// https://  ftp:// 等

然而我們也經常會遇到類似這樣的協議連接  
thunder://  迅雷的

item://  itunes的

ed2k:// 電驢的

這樣的協議是需要本地計算機安裝軟件與之接應, 實現相應操作的

也就是當你點一個類似的連接,瀏覽器會通知系統以何種程序處理該種協議的連接,這種對應是通過注冊表來實現的

參考資料:http://www.cnblogs.com/Aricc/archive/2009/03/18/1415929.html 
 

二、實現方案

要定義一個自定義協議,首先需要你有一款程序與之對應,

也就是說這個協議得有軟件去處理,一般會是下載操作。

而自定義協議連接最終是顯示在網頁上的,最終這是網頁與本地程序之間的交互。

而之間的橋梁就是瀏覽器。

那么要支持一個自定義協議,還需要去檢測本地是否有支持該協議的處理程序。

這個能力的檢測是要通過檢測瀏覽器的插件來判斷的。

也就是 裝軟件的時候同時給瀏覽器增加插件,以便標示系統有能力支持協議。

 

畫一個流程圖:

發布軟件 和自定義協議——》安裝軟件同時給瀏覽器安裝插件———》用腳本檢測瀏覽器插件以判斷支持情況————》點擊自定義協議連接調用本地程序處理

 

三、插件檢測

IE 可以通過嘗試 new ActiveXObject(axname); 操作是否成功來判斷插件存在情況

var a =  false;
         try {
             var obj =  new ActiveXObject(axname);
            a =  true;
        }  catch (e) {
            a =  false;    
            };

            return a; 

IE的另一種方法是  預先埋設一個 object 並查看該object的屬性或者方法來判斷本地是否有能力支持

比如apple itunes的object為: <object classID="CLSID:D719897A-B07A-4C0C-AEA9-9B663A28DFCB" width="1" height="1" id="iTunesDetectorIE" ></object>

 

Firefox Chrome 等瀏覽器可以通過遍歷其plugin 查看pluginName是否符合來判斷插件存在情況

 

var a =  false;
         if(navigator.plugins && navigator.plugins.length > 0) {
             for( var b = 0; b < navigator.plugins.length; b++) {
                 var c = navigator.plugins[b];
                 var d = c.name;
                 if( new RegExp(plugname,'i').test(d)) {
                    a =  true
                }
            }
        }
         return a

 

另一種方法是 通過mimetype 做判斷

 

try    {
             var mimetype = navigator.mimeTypes["application/"+plugname];
                 if(mimetype){
                    a =  true;
                } else{
                    a =  false;
                }
            }
             catch (e) {
                a =  false;
            }
         return a;

 

 

四、存在的問題:

IE操作activeX控件的時候 瀏覽器可能會出現小黃條提示 這可能跟你的瀏覽器設置相關,會有安全提示,這是無法避免的

也不要企圖捕獲小黃條出現的事件,這是安全提示,除非用戶主動操作,其他手段無法干預

當你的插件在不同的域名下運行時,會重復提示,只有用戶允許在該域名下運行時,提示才會消失。

當然如果你肯花錢,你可以做成 itunes的插件那樣的,默認在任何域名下運行

 

 

五、具體應用的實現流程

進入頁面,

瀏覽器判斷

不同瀏覽器的插件支持檢測

cookie記錄檢測結果

沒有插件————》預加載彈窗提示資源 

監測專用協議連接的點擊情況

根據插件支持檢測結果做相應操作

有插件————》調用本地程序處理

無插件(或者檢測不到)————》 彈窗提示安裝軟件

 

六、關於強制調用

如果不能確定本地有沒有相應程序支持,而強制將專用鏈接給瀏覽器處理會怎樣?

Firefox Chrome 都有有好的提示界面,提示瀏覽器不知道采用何種程序處理該協議的鏈接

IE 不同 版本會有不同表現,這跟它們的安全級別相關。

首先所有的IE都會顯示一個丑陋的界面表示瀏覽器打不開這個鏈接 

IE6的 安全性能最差,你可以用一個隱藏的iframe 來調用這個專用鏈接,而不會看到報錯信息,運氣好的話你可以

調起本地程序

IE7 8 9 則提升了安全性能,如果用隱藏的iframe來調用不識別的鏈接時,無論嵌套幾層,總會立即反映到最頂層

顯示無法打開該鏈接,意在通知用戶你在調用一個不識別的協議,可能會危害你的計算機安全。

IE9 第一次會報錯,顯示無法打開,而再次點擊則不會重復顯示無法打開的頁面。

 

七、具體項目應用和代碼實現

 

http://zhushou.360.cn/script/360mobilemgrdownload.js

 

 

 示例地址:

 http://zhushou.360.cn/

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM