Flash'ın yüklü olup olmadığını nasıl tespit edebilirim ve yoksa kullanıcıyı bilgilendiren gizli bir div görüntüleyebilirim?


88

Flash'ın yüklü olup olmadığını tespit etmek için javascript / jQuery / etc'yi nasıl kullanabilirim ve yüklü değilse, kullanıcıya flash yüklemesi gerektiğini bildiren bilgileri içeren bir div görüntüleyebilirim?

Yanıtlar:



159

swfobjectYeterli olmazsa veya biraz daha ısmarlama bir şey yaratmanız gerekiyorsa, şunu deneyin:

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

7 ve 8 ile çalışır.


2
Bu, yalnızca kurulu olup olmadığını tespit etmek istiyorsanız ve her iki şekilde de bir swf görüntülemesi gerekmiyorsa iyi çalışır.
ctrlShiftBryan

10
Bunu şu şekilde değiştirmek gerekiyordu: var hasFlash = false; deneyin {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
activexobject bölümünü test etmediğiniz için bu IE7 üzerinde çalışmaz
Kevin

1
Tüm kitaplığı kullanmak yerine 5 satır JavaScript kullanmak için oy verin
Alex W

Bu, firefox ve chrome gibi android mobil tarayıcı için çalışacak mı?
Maniprakash Chinnasamy

104

@ Drewid'in yanıtı Firefox 25'imde flash eklentisi devre dışı bırakılmış ancak yüklüyse işe yaramadı.

@ invertedSpear'ın bu yanıttaki yorumu firefox'ta çalıştı ancak herhangi bir IE sürümünde işe yaramadı.

Bu yüzden ikisinin de kodunu birleştirip bunu anladım. Google Chrome 31, Firefox 25, IE 8-10'da test edilmiştir. Teşekkürler Drewid ve ters çevrilmişSpear :)

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
sağlam cevap. Thnx for the life saver :)
Gogol

1
Firefox 39'da (2015-08-03) çalışır.
Vladimir Vukanac

1
Eklentiye izin verilirse çalışmaz, ancak kontrol ettiğimiz web sitesi için Flash açıkça engellenir. Safari 8.0.8. Bu durumda hasFlash hala doğrudur (yanlış olmalıdır).
Eugenio

Çok hoş. Teşekkürler !
Koby Douek

1
kısa ve tatlı
Sohail Faruqui

18

Navigator.mimeTypes'i kullanabilirsiniz.

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



2

Başlangıçta justpassinby tarafından önerilen Adobe'nin algılama kitini kullandım. Sistemleri güzel çünkü sürüm numarasını algılar ve sizin için 'gerekli sürümünüzle' karşılaştırır.

Kötü bir şey, flaşın algılanan sürümünü gösteren bir uyarı vermesidir, bu çok kullanıcı dostu değildir. Birdenbire rastgele görünen sayıların olduğu bir kutu açılır.

Dikkate almak isteyebileceğiniz bazı değişiklikler:

  • uyarıyı kaldır
  • bir nesne (veya dizi) döndürecek şekilde değiştirin --- ilk öğe, "kullanıcının makinesinde bulunan gerekli sürümdü" için boole doğru / yanlıştır --- ikinci öğe, kullanıcının makinesinde bulunan gerçek sürüm numarasıdır

1

Http://www.featureblend.com/javascript-flash-detection-library.html'nin çok çok küçültülmüş versiyonu (yalnızca boole flaş algılama)

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  
        }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.