Перекрестное обнаружение вспышки браузера в Javascript
У кого-нибудь есть пример скрипта, который может надежно работать в IE/Firefox, чтобы определить, способен ли браузер отображать встроенный flash-контент. Я говорю надежно, потому что знаю, что это невозможно в 100% случаев.
15 ответов
Я согласен с Макс Стюарт. SWFObject - это путь. Я хотел бы дополнить его ответ примером кода. Это должно заставить вас начать:
убедитесь, что вы включили (получить его здесь):
<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.
Он работает очень хорошо и документирован для быстрого использования. Это буквально заняло у меня 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 Карла Йестрау, здесь:
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 генератор библиотека (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;
}
Если вы просто хотите проверить, включена ли вспышка, этого должно быть достаточно.
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-объект, совместимый со стандартом (с JavaScript, однако), я рекомендую вам взглянуть на
ненавязчивые Флэш-объекты (НЛО)
создали небольшой .swf
, который перенаправляет. Если браузер включен flash, он перенаправит.
package com.play48.modules.standalone.util;
import flash.net.URLRequest;
class Redirect {
static function main() {
flash.Lib.getURL(new URLRequest("http://play48.com/flash.html"), "_self");
}
}