2013-07-18 4 views
9

Как я могу проверить использование jquery или javascript, заблокирован ли флеш-плагин в хроме?Как проверить плагин Flash заблокирован в Chrome

Мы можем проверить для инвалидов флэш-плагин, используя ниже

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

В Chrome можно отключить плагин индивидуально, нажав на отключения отдельного плагина. Затем, если мы отключим плагин индивидуально, над запросом работает и возвращает false. Но если мы заблокируем весь плагин, он вернет true только. Я считаю, что проблема заключается в том, как обнаружить, что плагин заблокирован.

+0

Что-то не так с тем, что у вас есть? Это вопрос, или вы пытались ответить самому себе? – Eric

+0

В чем отличие от обнаружения, отключен или заблокирован флеш-плагин? Думаю, в итоге вы получите тот же результат - не плагин для флеш-памяти. – 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. Но если мы заблокируем весь плагин, он вернет только истину.Поэтому моя озабоченность заключается в том, как обнаружить, что плагин заблокирован. Из вышеизложенного ответа не ожидается. – 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. Проверьте установленный плагин.
  2. Инициализируйте свою вспышку swf, как обычно.
  3. Вызовите функцию через внешний интерфейс Flash, который предназначен для того, чтобы просто сказать вам, отвечает ли плагин.
  4. Если он отвечает, продолжайте, как обычно.
  5. Если он не отвечает, откиньтесь в идеальное решение javascript.

Потому что это вещь безопасности браузера, у которой нет прямого доступа к api, который может сообщить вам, заблокирован ли ваш желаемый плагин. Я думаю, что это может быть единственным решением, доступным прямо сейчас. Также обратите внимание, что последняя версия chrome (54.0.2840.59 прямо сейчас) chrome блокирует всю флеш-память, если она работает в iframe.