2009-06-15 32 views

Trả lời

17

Bạn có thể sử dụng navigator.mimeTypes.

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

-1 Không có vẻ để làm việc trong IE7. –

158

Nếu swfobject sẽ không đủ, hoặc bạn cần phải tạo ra một cái gì đó một chút bespoke hơn, hãy thử này:

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

Nó hoạt động với 7 và 8.

+2

hoạt động tốt nếu bạn chỉ muốn phát hiện nếu nó được cài đặt và không nhất thiết phải hiển thị một swf một trong hai cách. – ctrlShiftBryan

+10

Phải sửa đổi điều này thành: var hasFlash = false; \t \t thử { \t \t var fo = (navigator.mimeTypes && navigator.mimeTypes ['application/x-shockwave-flash'])? navigator.mimeTypes ['application/x-shockwave-flash']. enabledPlugin: 0; \t \t nếu (fo) hasFlash = true; \t \t} bắt (e) { \t \t nếu (navigator.mimeTypes ['application/x-shockwave-flash']! = Undefined) hasFlash = true; \t \t}" – invertedSpear

+1

rằng sẽ không làm việc trên IE7, như bạn không thử nghiệm phần ActiveXObject – Kevin

2

Tôi đã từng phát hiện của Adobe kit, ban đầu được đề xuất bởi justpassinby. Hệ thống của họ rất đẹp vì nó phát hiện số phiên bản và so sánh nó với bạn 'phiên bản yêu cầu'

Một điều xấu là cảnh báo hiển thị phiên bản flash đã phát hiện, không thân thiện với người dùng. Đột nhiên một hộp bật lên với một số con số dường như ngẫu nhiên.

Một số sửa đổi, bạn có thể muốn xem xét:

  • loại bỏ các cảnh báo
  • thay đổi nó để nó trả về một đối tượng (hoặc mảng) --- yếu tố đầu tiên là boolean true/false cho "là phiên bản cần thiết được tìm thấy trên máy của người dùng" --- Yếu tố thứ hai là số phiên bản thực tế được tìm thấy trên máy của người dùng
103

@ Câu trả lời của Drewid không hoạt động trong Firefox 25 nếu plugin flash bị tắt nhưng được cài đặt.

@ đảo ngược nhận xét của Spear trong câu trả lời đó đã hoạt động trong firefox nhưng không có trong bất kỳ phiên bản IE nào.

Vì vậy, kết hợp cả mã của họ và nhận được mã này. Đã thử nghiệm trong Google Chrome 31, Firefox 25, IE 8-10. Cảm ơn Drewid và 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; 
    } 
} 
+2

Điều này dường như đang hoạt động tuyệt vời –

+1

+1 Cổ vũ giao phối, đánh giá cao việc bạn kết hợp cả hai. – Prisoner

+1

câu trả lời chắc chắn. Thnx cho trình tiết kiệm cuộc sống :) – Gogol

1

phiên bản rút gọn của rất Rất http://www.featureblend.com/javascript-flash-detection-library.html (chỉ boolean phát hiện đèn 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 
     } 
Các vấn đề liên quan