Кроссбраузерное обнаружение Flash в Javascript
есть ли у кого-нибудь пример скрипта, который может надежно работать в IE/Firefox, чтобы определить, способен ли браузер отображать встроенный флеш-контент. Я говорю надежно, потому что знаю, что это невозможно в 100% случаев.
15 ответов:
SWFObject очень надежна. Я использовал его без проблем долгое время.
Я согласен с Макс Стюарт. SWFObject - это путь. Я хотел бы дополнить его ответ примером кода. Это должно заставить вас начать:
убедитесь, что вы включили
swfobject.js
file (get it здесь):<script type="text/javascript" src="swfobject.js"></script>
тогда используйте его так:
if(swfobject.hasFlashPlayerVersion("9.0.115")) { alert("You have the minimum required flash version (or newer)"); } else { alert("You do not have the minimum required flash version"); }
замените "9.0.115" на любую минимальную версию flash, которая вам нужна. Я выбрал 9.0.115 в качестве примера, потому что это версия, которая добавила h. 264 поддержка.
если у посетителя нет вспышки, он сообщит о флеш-версии "0.0.0", поэтому, если вы просто хотите знать, есть ли у них вспышка вообще, используйте:
if(swfobject.hasFlashPlayerVersion("1")) { alert("You have flash!"); } else { alert("You do not flash :-("); }
Я знаю, это старый пост, но я искал и ничего не нашел.
Я реализовал Библиотека Обнаружения JavaScript Flash. Он работает очень хорошо и документирован для быстрого использования. Это буквально заняло у меня 2 минуты. Вот код, который я написал в заголовке:<script src="Scripts/flash_detect.js"></script> <script type="text/javascript"> if (!FlashDetect.installed) { alert("Flash is required to enjoy this site."); } else { alert("Flash is installed on your Web browser."); } </script>
вы могли бы использовать компилятора для создания небольшой, кросс-браузер флэш-обнаружения:
// ==ClosureCompiler== // @compilation_level ADVANCED_OPTIMIZATIONS // @output_file_name default.js // @formatting pretty_print // @use_closure_library true // ==/ClosureCompiler== // ADD YOUR CODE HERE goog.require('goog.userAgent.flash'); if (goog.userAgent.flash.HAS_FLASH) { alert('flash version: '+goog.userAgent.flash.VERSION); }else{ alert('no flash found'); }
что приводит к следующим "составлен" код:
var a = !1, b = ""; function c(d) { d = d.match(/[\d]+/g); d.length = 3; return d.join(".") } if (navigator.plugins && navigator.plugins.length) { var e = navigator.plugins["Shockwave Flash"]; e && (a = !0, e.description && (b = c(e.description))); navigator.plugins["Shockwave Flash 2.0"] && (a = !0, b = "2.0.0.11") } else { if (navigator.mimeTypes && navigator.mimeTypes.length) { var f = navigator.mimeTypes["application/x-shockwave-flash"]; (a = f && f.enabledPlugin) && (b = c(f.enabledPlugin.description)) } else { try { var g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"), a = !0, b = c(g.GetVariable("$version")) } catch (h) { try { g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"), a = !0, b = "6.0.21" } catch (i) { try { g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), a = !0, b = c(g.GetVariable("$version")) } catch (j) {} } } } } var k = b; a ? alert("flash version: " + k) : alert("no flash found");
минимальная версия, которую я когда-либо использовал (не проверяет версию, просто Flash плагин):
var hasFlash = function() { return (typeof navigator.plugins == "undefined" || navigator.plugins.length == 0) ? !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) : navigator.plugins["Shockwave Flash"]; };
библиотека обнаружения JavaScript Flash Карла Йестрау, здесь:
http://www.featureblend.com/javascript-flash-detection-library.html
... может быть то, что вы ищете.
возможно, набор обнаружения flash player adobe может быть полезен здесь?
http://www.adobe.com/products/flashplayer/download/detection_kit/
обнаружение и внедрение Flash в Веб-документ является удивительно сложной задачей.
Я был очень разочарован качеством и нестандартной совместимой разметкой, созданной как из SWFObject, так и из решений Adobe. Кроме того, мое тестирование показало, что автоматическое обновление Adobe является непоследовательным и ненадежным.
Библиотека Обнаружения Вспышки JavaScript (Flash Detect) и JavaScript Flash HTML Generator Library (Flash TML) - это разборчивое, ремонтопригодное и соответствующее стандартам решение разметки.
-"Люк прочитал источник!"
код для одного лайнера
isFlashExists
переменной:<script type='text/javascript' src='//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js'> </script> <script type='text/javascript'> var isFlashExists = swfobject.hasFlashPlayerVersion('1') ? true : false ; if (isFlashExists) { alert ('flash exists'); } else { alert ('NO flash'); } </script>
обратите внимание, что есть альтернатива такой:
swfobject.getFlashPlayerVersion();
просмотр источника в http://whatsmy.browsersize.com (строки 14-120).
вот абстрактный кросс-браузер код на jsbin на обнаружение вспышки только, работает на: FF / IE / Safari / Opera / Chrome.
о:
var hasFlash = function() { var flash = false; try{ if(new ActiveXObject('ShockwaveFlash.ShockwaveFlash')){ flash=true; } }catch(e){ if(navigator.mimeTypes ['application/x-shockwave-flash'] !== undefined){ flash=true; } } return flash; };
Если вы заинтересованы в чистом решении Javascript, вот тот, который я копирую из Брет:
function detectflash(){ if (navigator.plugins != null && navigator.plugins.length > 0){ return navigator.plugins["Shockwave Flash"] && true; } if(~navigator.userAgent.toLowerCase().indexOf("webtv")){ return true; } if(~navigator.appVersion.indexOf("MSIE") && !~navigator.userAgent.indexOf("Opera")){ try{ return new ActiveXObject("ShockwaveFlash.ShockwaveFlash") && true; } catch(e){} } return false; }
Если вы просто хотели проверить, включена ли flash, этого должно быть достаточно.
function testFlash() { var support = false; //IE only if("ActiveXObject" in window) { try{ support = !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")); }catch(e){ support = false; } //W3C, better support in legacy browser } else { support = !!navigator.mimeTypes['application/x-shockwave-flash']; } return support; }
Примечание: избегайте проверки enabledPlugin некоторые браузера для мобильных устройств в одно касание включить Flash плагин, и будет вызывать ложноотрицательный.