Как я могу определить, установлен ли Flash и, если нет, отобразить скрытый div, который информирует пользователя? - PullRequest
87 голосов
/ 16 июня 2009

Как я могу использовать javascript / jQuery / etc, чтобы определить, установлен ли Flash, а если нет, отобразить div, содержащий информацию, информирующую пользователя о том, что ему нужно установить flash?

Ответы [ 8 ]

160 голосов
/ 26 июля 2010

Если swfobject недостаточно, или вам нужно создать что-то более индивидуальное, попробуйте это:

var hasFlash = false;
try {
    hasFlash = Boolean(new ActiveXObject('ShockwaveFlash.ShockwaveFlash'));
} catch(exception) {
    hasFlash = ('undefined' != typeof navigator.mimeTypes['application/x-shockwave-flash']);
}

Работает с 7 и 8.

104 голосов
/ 20 ноября 2013

@ Ответ Дрюида не работал в моем Firefox 25, если плагин флэш-памяти только отключен, но установлен.

@ Комментарий invertedSpear в этом ответе работал в Firefox, но не в любой версии IE.

Так что объединили оба их кода и получили это. Протестировано в Google Chrome 31, Firefox 25, IE 8-10. Спасибо Drewid и InvertSpear:)

var hasFlash = false;
try {
  var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
  if (fo) {
    hasFlash = true;
  }
} catch (e) {
  if (navigator.mimeTypes
        && navigator.mimeTypes['application/x-shockwave-flash'] != undefined
        && navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin) {
    hasFlash = true;
  }
}
26 голосов
/ 16 июня 2009

Использовать swfobject. он заменяет div со вспышкой, если он установлен. см .: http://code.google.com/p/swfobject/

18 голосов
/ 16 июня 2009

Вы можете использовать navigator.mimeTypes.

if (navigator.mimeTypes ["application/x-shockwave-flash"] == undefined)
    $("#someDiv").show ();
10 голосов
/ 28 июня 2012

jqplugin: http://code.google.com/p/jqplugin/

$.browser.flash == true
4 голосов
/ 06 апреля 2014

Вы также должны быть в состоянии использовать ..

swfobject.getFlashPlayerVersion().major === 0

с swfobject-Plugin .

2 голосов
/ 29 марта 2011

Я использовал набор для определения Adobe, первоначально предложенный justpassinby. Их система хороша тем, что она определяет номер версии и сравнивает его с вашей «требуемой версией»

Одна плохая вещь - это предупреждение, показывающее обнаруженную версию flash, которая не очень удобна для пользователя. Внезапно всплывает окно с некоторыми, казалось бы, случайными числами.

Некоторые модификации, которые вы можете рассмотреть:

  • удалить предупреждение
  • изменить его так, чтобы он возвращал объект (или массив) --- первый элемент имеет логическое значение true / false для "была найдена требуемая версия на компьютере пользователя" --- второй элемент - это фактический номер версии, найденный на компьютере пользователя
1 голос
/ 07 октября 2015

Очень очень минимизированная версия http://www.featureblend.com/javascript-flash-detection-library.html (только логическое обнаружение вспышки)

var isFlashInstalled = (function(){
var b=new function(){var n=this;n.c=!1;var a="ShockwaveFlash.ShockwaveFlash",r=[{name:a+".7",version:function(n){return e(n)}},{name:a+".6",version:function(n){var a="6,0,21";try{n.AllowScriptAccess="always",a=e(n)}catch(r){}return a}},{name:a,version:function(n){return e(n)}}],e=function(n){var a=-1;try{a=n.GetVariable("$version")}catch(r){}return a},i=function(n){var a=-1;try{a=new ActiveXObject(n)}catch(r){a={activeXError:!0}}return a};n.b=function(){if(navigator.plugins&&navigator.plugins.length>0){var a="application/x-shockwave-flash",e=navigator.mimeTypes;e&&e[a]&&e[a].enabledPlugin&&e[a].enabledPlugin.description&&(n.c=!0)}else if(-1==navigator.appVersion.indexOf("Mac")&&window.execScript)for(var t=-1,c=0;c<r.length&&-1==t;c++){var o=i(r[c].name);o.activeXError||(n.c=!0)}}()};  
return b.c;
    })();

if(isFlashInstalled){
    // Do something with flash
    }else{
    // Don't use flash  
        }
...