Как я могу определить, установлена ли Flash, а если нет, отобразите скрытый div, который информирует пользователя?
Как я могу использовать javascript/jQuery/etc, чтобы определить, установлена ли Flash, а если нет, отобразите div, содержащий информацию, информирующую пользователя о том, что им нужно установить flash?
8 ответов:
использовать swfobject. он заменяет div на вспышку, если она установлена. смотрите: http://code.google.com/p/swfobject/
Если
swfobject
не будет достаточно, или вам нужно создать что-то немного больше на заказ, попробуйте это:var hasFlash = false; try { hasFlash = Boolean(new ActiveXObject('ShockwaveFlash.ShockwaveFlash')); } catch(exception) { hasFlash = ('undefined' != typeof navigator.mimeTypes['application/x-shockwave-flash']); }
Он работает с 7 и 8.
ответ @ Drewid не работал в моем Firefox 25, если плагин flash просто отключен, но установлен.
комментарий@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; } }
вы можете использовать навигатор.MIME-типов.
if (navigator.mimeTypes ["application/x-shockwave-flash"] == undefined) $("#someDiv").show ();
jqplugin: http://code.google.com/p/jqplugin/
$.browser.flash == true
Я использовал набор обнаружения Adobe, первоначально предложенный justpassinby. Их система хороша, потому что она обнаруживает номер версии и сравнивает его для вас с вашей "требуемой версией"
одна плохая вещь - это предупреждение, показывающее обнаруженную версию flash, которая не очень удобна для пользователя. Внезапно появляется коробка с некоторыми, казалось бы, случайными числами.
некоторые изменения, которые вы можете рассмотреть:
- удалить тревога
- измените его так, чтобы он возвращал объект (или массив) --- первый элемент является логическим true / false для "Была ли найдена Требуемая версия на машине пользователя" --- второй элемент-это фактический номер версии, найденный на машине пользователя
очень-очень уменьшенная версия 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 }