Làm cách nào tôi có thể phát hiện nếu Flash được cài đặt và nếu không, hãy hiển thị một div ẩn thông báo cho người dùng?


88

Làm cách nào tôi có thể sử dụng javascript / jQuery / etc để phát hiện xem Flash đã được cài đặt chưa và nếu chưa, hãy hiển thị một div chứa thông tin cho người dùng biết rằng họ cần cài đặt flash?

Câu trả lời:



159

Nếu swfobjectkhông đủ hoặc bạn cần tạo thứ gì đó riêng biệt hơn một chút, hãy thử cách 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
Điều này hoạt động tốt nếu bạn chỉ muốn phát hiện xem nó đã được cài đặt hay chưa và không nhất thiết phải hiển thị swf theo cả hai cách.
ctrlShiftBryan 13/10/10

10
Phải sửa đổi điều này thành: var hasFlash = false; thử {var fo = (Navigator.mimeTypes && Navigator.mimeTypes ['application / x-shockwave-flash'])? Navigator.mimeTypes ['application / x-shockwave-flash']. enablePlugin: 0; if (fo) hasFlash = true; } catch (e) {if (Navigator.mimeTypes ['application / x-shockwave-flash']! = undefined) hasFlash = true; } "
invertedSpear

1
sẽ không hoạt động trên IE7, vì bạn không thử nghiệm phần activexobject
Kevin

1
upvote cho việc sử dụng 5 dòng mã JavaScript thay vì sử dụng toàn bộ thư viện
Alex W

Điều này sẽ hoạt động cho trình duyệt di động Android như firefox và chrome?
Maniprakash Chinnasamy

105

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

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

Vì vậy, kết hợp cả hai mã của họ và có được điều 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;
  }
}

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

1
Hoạt động trong Firefox 39 (2015-08-03).
Vladimir Vukanac

1
Nó không hoạt động nếu plugin được cho phép nhưng Flash bị chặn rõ ràng đối với trang web mà chúng tôi đang kiểm tra. Safari 8.0.8. Trong trường hợp này hasFlash vẫn đúng (nên sai).
Eugenio

Rất đẹp. Cảm ơn !
Koby Douek

1
ngắn và ngọt ngào
Sohail Faruqui

18

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

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



2

Tôi đã sử dụng bộ phát hiện của Adobe, được gợi ý ban đầu bởi justpassinby. Hệ thống của họ rất hay vì nó phát hiện số phiên bản và so sánh nó cho bạn với 'phiên bản yêu cầu' của bạn

Một điều tồi tệ là nó xuất hiện một cảnh báo hiển thị phiên bản flash được phát hiện, phiên bản này 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:

  • gỡ bỏ cảnh báo
  • thay đổi nó để nó trả về một đối tượng (hoặc mảng) --- phần tử đầu tiên là boolean true / false cho "phiên bản được yêu cầu được tìm thấy trên máy của người dùng" --- phần 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

1

Phiên bản rất nhỏ gọn của http://www.featureblend.com/javascript-flash-detection-library.html (chỉ phát hiện flash boolean)

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  
        }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.