最近項目進入到了驗收階段,需要兼容不同的瀏覽器,海康的Demo寫了一個判斷插件是否成功安裝的函數,但是經過測試,只在IE瀏覽器下有效果,在其他的瀏覽器下面會出現Bug,現在需要寫一個通用的方法,在不同的瀏覽器使用場景下都能判斷海康的視頻插件是否安裝
首先,需要判斷用戶當前使用的瀏覽器版本,我在網上找到了一個函數,代碼如下:

function getExplorerInfo() { var explorer = window.navigator.userAgent.toLowerCase(); //ie if (explorer.indexOf("msie") >= 0) { var ver = explorer.match(/msie ([\d.]+)/)[1]; return { type: "IE", version: ver }; } //firefox else if (explorer.indexOf("firefox") >= 0) { var ver = explorer.match(/firefox\/([\d.]+)/)[1]; return { type: "Firefox", version: ver }; } //Chrome else if (explorer.indexOf("chrome") >= 0) { var ver = explorer.match(/chrome\/([\d.]+)/)[1]; return { type: "Chrome", version: ver }; } //Opera else if (explorer.indexOf("opera") >= 0) { var ver = explorer.match(/opera.([\d.]+)/)[1]; return { type: "Opera", version: ver }; } //Safari else if (explorer.indexOf("Safari") >= 0) { var ver = explorer.match(/version\/([\d.]+)/)[1]; return { type: "Safari", version: ver }; } } alert("瀏覽器:" + getExplorerInfo().type + "\n 版本:" + getExplorerInfo().version);
但是在實際的調用中,發現這個函數並不准確,我測試了一下幾個不同瀏覽器返回的window.navigator.userAgent值(即用戶當前使用的瀏覽器型號)
搜狗瀏覽器
mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/49.0.2623.221 safari/537.36 se 2.x metasr 1.0
Chrome瀏覽器
mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/53.0.2785.104 safari/537.36 core/1.53.3538.400
QQ瀏覽器
mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/53.0.2785.104 safari/537.36 core/1.53.3538.400
IE瀏覽器
mozilla/5.0 (windows nt 10.0; wow64; trident/7.0; .net4.0c; .net4.0e; .net clr 2.0.50727; .net clr 3.0.30729; .net clr 3.5.30729; rv:11.0) like gecko
火狐瀏覽器
mozilla/5.0 (windows nt 10.0; win64; x64; rv:56.0) gecko/20100101 firefox/56.0
可以看到,區分各個瀏覽器版本的主要是他們的內核,現在主流的瀏覽器的內核有四種,Trident,Gecko,Webkit ,Presto,我把方法改了一下,根據內核來判斷不同的瀏覽器,代碼如下:

1 function getExplorer() { 2 //獲取當前使用的瀏覽器的型號 3 var explorer = window.navigator.userAgent.toLowerCase() ; 4 if (explorer.indexOf("applewebkit") >= 0) { 5 alert("applewebkit內核瀏覽器"); 6 } 7 else if (explorer.indexOf("trident") >= 0) { 8 alert("IE瀏覽器"); 9 } 10 else if (explorer.indexOf("gecko") >= 0) { 11 alert("gecko內核瀏覽器"); 12 } 13 }
分辨出不同的瀏覽器之后,下面開始寫判斷是否安裝OCX插件的方法,在IE環境下,用海康自帶的方法,其他的瀏覽器用來判斷OCX插件是否注冊
首先在搜索框內輸入regedit,打開注冊表
找到對應OCX插件的名字,復制插件名字
以我本機為例,代碼如下:

var NewObj; try { NewObj = new ActiveXObject("WebVideoKitActiveX.WebVideoKitActiveXCtrl.1"); if (typeof(NewObj) != 'undefined') { // NewObj = null; alert("已經注冊"); } } catch (e) { // NewObj = null; alert("尚未注冊"); }
運行,發現還是只是在IE上可以用這個方法判斷海康插件是否安裝成功,其他瀏覽器還不能判斷,按F12,找到報錯的地方,try{}catch{},代碼如下:

try{ WebVideoCtrl.I_InitPlugin(b.videowidth,b.videoheight, { iWndowType: sziWndowType, cbSelWnd: function (xmlDoc) { g_iWndIndex = $(xmlDoc).find("SelectWnd").eq(0).text(); } }); WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin"); } catch(err) { alert("沒有注冊"); } finally { }
問題解決