Bagaimana saya bisa mendeteksi jika Flash diinstal dan jika tidak, menampilkan div tersembunyi yang menginformasikan pengguna?

88

Bagaimana saya dapat menggunakan javascript / jQuery / etc untuk mendeteksi jika Flash diinstal dan jika tidak, menampilkan div yang berisi informasi yang memberi tahu pengguna bahwa mereka perlu menginstal flash?

KingNestor
sumber

Jawaban:

159

Jika swfobjecttidak cukup, atau Anda perlu membuat sesuatu yang lebih dipesan lebih dahulu, coba ini:

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

Ia bekerja dengan 7 dan 8.

Drewid
sumber
2
ini berfungsi dengan baik jika Anda hanya ingin mendeteksi apakah sudah terpasang dan tidak selalu menampilkan swf.
ctrlShiftBryan
10
Harus memodifikasi ini menjadi: var hasFlash = false; coba {var fo = (navigator.mimeTypes && navigator.mimeTypes ['application / x-shockwave-flash'])? navigator.mimeTypes ['application / x-shockwave-flash']. enabledPlugin: 0; jika (fo) hasFlash = true; } catch (e) {if (navigator.mimeTypes ['application / x-shockwave-flash']! = undefined) hasFlash = true; } "
invertedSpear
1
yang tidak akan berfungsi di IE7, karena Anda tidak menguji bagian activexobject
Kevin
1
suara positif untuk menggunakan 5 baris JavaScript daripada menggunakan seluruh perpustakaan
Alex W
Ini akan berfungsi untuk browser seluler android seperti firefox dan chrome?
Maniprakash Chinnasamy
104

Jawaban @ Drewid tidak berfungsi di Firefox 25 saya jika plugin flash hanya dinonaktifkan tetapi diinstal.

Komentar @ invertedSpear di jawaban itu berfungsi di firefox tetapi tidak di versi IE mana pun.

Jadi gabungkan kedua kode mereka dan dapatkan ini. Diuji di Google Chrome 31, Firefox 25, IE 8-10. Terima kasih Drewid dan 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;
  }
}
Vigneshwaran
sumber
1
jawaban yang solid. Thnx for the life saver :)
Gogol
1
Berfungsi di Firefox 39 (2015-08-03).
Vladimir Vukanac
1
Itu tidak berfungsi jika plugin diizinkan tetapi Flash secara eksplisit diblokir untuk situs web yang kami periksa. Safari 8.0.8. Dalam hal ini hasFlash masih benar (seharusnya salah).
Eugenio
Sangat bagus. Terima kasih!
Koby Douek
1
pendek dan manis
Sohail Faruqui
18

Anda dapat menggunakan navigator.mimeTypes.

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

Anda juga harus bisa menggunakan ..

swfobject.getFlashPlayerVersion().major === 0

dengan swfobject-Plugin .

pengguna3502163
sumber
swfobjecttidak ditentukan.
mikemaccana
2

Saya menggunakan kit deteksi Adobe, awalnya disarankan oleh justpassinby. Sistem mereka bagus karena mendeteksi nomor versi dan membandingkannya untuk Anda dengan 'versi yang diperlukan'

Satu hal yang buruk adalah ia melakukan peringatan yang menunjukkan versi flash yang terdeteksi, yang sangat tidak ramah pengguna. Tiba-tiba sebuah kotak muncul dengan beberapa nomor yang tampaknya acak.

Beberapa modifikasi yang mungkin ingin Anda pertimbangkan:

  • hapus peringatan
  • ubah sehingga mengembalikan objek (atau larik) --- elemen pertama adalah boolean true / false untuk "adalah versi yang diperlukan ditemukan di mesin pengguna" --- elemen kedua adalah nomor versi sebenarnya yang ditemukan di mesin pengguna
Mike
sumber
1

Versi yang sangat sangat kecil dari http://www.featureblend.com/javascript-flash-detection-library.html (hanya deteksi boolean flash)

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  
        }
lucasgabmoreno
sumber