2013-07-18 31 views
9

如何使用jquery或javascript檢查flash插件是否在Chrome中被阻止?如何檢查閃存插件在Chrome中被阻止

我們可以使用下面

((typeof navigator.plugins != "undefined" && typeof navigator.plugins["Shockwave Flash"] == "object") || (window.ActiveXObject && (new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) != false)); 

在Chrome中檢查禁用Flash插件您可以禁用點擊禁用個別插件單獨插件。然後,如果我們單獨禁用插件,上面的查詢工作並返回false。但是,如果我們阻止所有插件,它將僅返回true。因此,我擔心如何檢測插件已被阻止。

+0

你有什麼問題?這是一個問題,還是你試圖回答自己? – Eric

+0

與檢測Flash插件是否被禁用或阻止有什麼區別?我想你最終會得到相同的結果 - 沒有Flash插件。 – intuitivepixel

+0

在Chrome中,您可以通過單擊禁用單個插件來單獨禁用插件。然後,如果我們單獨禁用插件,上面的查詢工作並返回false。但是,如果我們阻止所有插件,它將僅返回true。因此,我擔心如何檢測插件已被阻止。 – virus

回答

2

你可以使用類似swfobject的東西來處理閃光檢測,但類似的東西也應該工作;

var flashAvailable = false; 
try { 
    var flash = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); 
    if(flash) { 
    flashAvailable = true; 
    } 
} 
catch(e) { 
    if(navigator.mimeTypes ["application/x-shockwave-flash"] != undefined) { 
    flashAvailable = true; 
    } 
} 
+2

在Chrome中,您可以通過單擊禁用單個插件來單獨禁用插件。然後,如果我們單獨禁用插件,上面的查詢工作並返回false。但是,如果我們阻止所有插件,它將只返回true。因此,我關心的是如何檢測一個插件已被阻止。以上所述不是預期的答案。 – virus

+0

@virus,我明白你的意思,然後對不起:/ – intuitivepixel

0

我發現唯一可靠的方法是讓單個Flash元素提醒瀏覽器它已啓用,即。它沒有被阻止。

我做這個使用下面的代碼在我的Flash文件的開頭:

import flash.external.ExternalInterface; 
ExternalInterface.call('flashHasLoaded','my-identifier'); 

這然後觸發JavaScript函數在瀏覽器中:

<script type="text/javascript"> 
    function flashHasLoaded(optionalIdentifier){ 
     alert("A flash file has started running"); 
     if(optionalIdentifier == "specific-thing") alert("Specific thing loaded - do something"); 
    } 
</script> 

請記住,這不會觸發馬上,只有Flash加載並開始運行。

0

我能想到檢查瀏覽器是否阻止插件的唯一方法是調用插件並查看它是否返回。在你的情況下,這些步驟:

  1. 檢查Flash插件已安裝。
  2. 像往常一樣初始化您的閃存swf。
  3. 通過Flash外部接口調用函數,該接口旨在告訴您插件是否正在響應。
  4. 如果響應,則照常進行。
  5. 如果它沒有響應,理想情況下回落到javascript解決方案。

因爲這是一個瀏覽器安全的事情,你不能直接訪問api,它可以告訴你,如果你想要的插件被阻止。我認爲這可能是目前唯一可用的解決方案。另請注意,最新版本的chrome(現在是54.0.2840.59)chrome會阻止所有flash在iframe中運行。