Обнаружение кросс-браузерной вспышки в Javascript - PullRequest
94 голосов
/ 01 октября 2008

Есть ли у кого-нибудь пример скрипта, который может надежно работать в IE / Firefox, чтобы определить, способен ли браузер отображать встроенный флэш-контент. Я говорю надежно, потому что знаю, что это невозможно в 100% случаев.

Ответы [ 16 ]

109 голосов
/ 30 декабря 2010

Я согласен с Максом Стюартом . SWFObject - это путь. Я хотел бы дополнить его ответ примером кода. Это должно помочь вам начать:

Убедитесь, что вы включили файл swfobject.js (получите здесь ):

<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» на ту минимальную версию флэш-памяти, которая вам нужна. Я выбрал 9.0.115 в качестве примера, потому что в этой версии добавлена ​​поддержка h.264.

Если у посетителя нет вспышки, он сообщит о версии флэш-памяти «0.0.0», поэтому, если вы просто хотите узнать, есть ли у него вспышка, используйте:

if(swfobject.hasFlashPlayerVersion("1"))
{
    alert("You have flash!");
}
else
{
    alert("You do not flash :-(");
}
93 голосов
/ 01 октября 2008

SWFObject очень надежный. Я использовал его без проблем довольно долгое время.

36 голосов
/ 01 марта 2011

Я знаю, что это старый пост, но я долго искал и ничего не нашел.
Я реализовал библиотеку JavaScript Flash Flash Detection . Это работает очень хорошо, и это задокументировано для быстрого использования. Это буквально заняло у меня 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>        
32 голосов
/ 26 марта 2012

Вы можете использовать закрывающий компилятор для генерации небольшого кросс-браузерного определения флэш-памяти:

// ==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");
21 голосов
/ 15 октября 2012

Минимальная версия, которую я когда-либо использовал (не проверяет версию, только Flash Plugin):

var hasFlash = function() {
    return (typeof navigator.plugins == "undefined" || navigator.plugins.length == 0) ? !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) : navigator.plugins["Shockwave Flash"];
};
8 голосов
/ 02 октября 2008

Библиотека определения вспышки JavaScript Карла Йестро, здесь:

http://www.featureblend.com/javascript-flash-detection-library.html

... может быть, то, что вы ищете.

7 голосов
/ 01 октября 2008

Может быть, здесь поможет набор для определения флэш-плеера Adobe?

http://www.adobe.com/products/flashplayer/download/detection_kit/

5 голосов
/ 14 октября 2008

Обнаружение и встраивание Flash в веб-документ - удивительно сложная задача.

Я был очень разочарован качеством и нестандартной разметкой, созданной решениями SWFObject и Adobe. Кроме того, в ходе моего тестирования было установлено, что средство автоматического обновления Adobe несовместимо и ненадежно.

Библиотека JavaScript Flash Flash Detection (Flash Detect) и Библиотека JavaScript Flash HTML Generator (Flash TML) - удобочитаемое, поддерживаемое и совместимое со стандартами решение для разметки.

- «Люк, читай источник!»

4 голосов
/ 02 марта 2013

код для одного вкладыша 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();

3 голосов
/ 30 марта 2014

Если вы заинтересованы в чистом решении 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;
}
...