Як я можу визначити, чи встановлено Flash, а якщо ні, відобразити прихований div, який інформує користувача?


88

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

Відповіді:



159

Якщо swfobjectцього не вистачить, або вам потрібно створити щось на замовлення, спробуйте наступне:

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

Він працює з 7 і 8.


2
це добре працює, якщо ви просто хочете виявити, чи він встановлений, і не обов’язково відображати swf в будь-якому випадку.
ctrlShiftBryan

10
Довелося змінити це на: var hasFlash = false; спробувати {var fo = (navigator.mimeTypes && navigator.mimeTypes ['application / x-shockwave-flash'])? navigator.mimeTypes ['application / x-shockwave-flash']. enabledPlugin: 0; if (fo) hasFlash = true; } catch (e) {if (navigator.mimeTypes ['application / x-shockwave-flash']! = undefined) hasFlash = true; } "
invertedSpear

1
це не буде працювати на IE7, оскільки ви не тестуєте частину активного об'єкта
Кевін,

1
прихильність за використання 5 рядків JavaScript замість використання цілої бібліотеки
Alex W

Це буде працювати для мобільних браузерів для Android, таких як Firefox та Chrome?
Maniprakash Chinnasamy

104

Відповідь @ Drewid не спрацювала у моєму Firefox 25, якщо плагін просто вимкнено, але встановлений.

Коментар @ invertedSpear у цій відповіді працював у firefox, але не в будь-якій версії IE.

Тож поєднав і їх код, і отримав це. Перевірено в Google Chrome 31, Firefox 25, IE 8-10. Дякую Drewid та invertedSpear :)

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;
  }
}

1
тверда відповідь. Thnx для порятунку життя :)
Гоголь

1
Працює у Firefox 39 (03.08.2015).
Володимир Вуканац

1
Це не працює, якщо плагін дозволено, але Flash явно заблоковано для веб-сайту, який ми перевіряємо. Safari 8.0.8. У цьому випадку hasFlash все ще відповідає дійсності (має бути помилковим).
Eugenio

Дуже хороша. Дякую !
Koby Douek

1
короткий і солодкий
Сохайл Фарукі

18

Ви можете використовувати navigator.mimeTypes.

if (navigator.mimeTypes ["application/x-shockwave-flash"] == undefined)
    $("#someDiv").show ();



2

Я використовував набір виявлення Adobe, спочатку запропонований justpassinby. Їхня система приємна, оскільки вона виявляє номер версії та порівнює її для вас із "необхідною версією"

Одна погана річ - це попередження, яке показує виявлену версію спалаху, яка не дуже зручна для користувача. Раптом з’являється коробка з деякими, здавалося б, випадковими числами.

Деякі модифікації, які ви можете розглянути:

  • видалити попередження
  • змінити його, щоб він повернув об'єкт (або масив) --- перший елемент є логічним значенням true / false, оскільки "була потрібна версія, знайдена на машині користувача" --- другий елемент - це фактичний номер версії, знайдений на машині користувача

1

Дуже мінімізована версія 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  
        }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.