web-dev-qa-db-ja.com

Flashがインストールされているかどうかを検出し、インストールされていない場合、ユーザーに通知する非表示のdivを表示するにはどうすればよいですか?

Javascript/jQuery/etcを使用してFlashがインストールされているかどうかを検出し、インストールされていない場合、フラッシュをインストールする必要があることをユーザーに通知する情報を含むdivを表示するにはどうすればよいですか?

88
KingNestor

Swfobjectを使用します。 divがインストールされている場合、フラッシュに置き換えます。参照: http://code.google.com/p/swfobject/

26
Josh

swfobjectでは十分でない場合、またはもう少しカスタマイズしたものを作成する必要がある場合は、これを試してください。

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

7および8で動作します。

160
Drewid

@Drewidの答えは、Flashプラグインが無効になっているだけでインストールされている場合、Firefox 25では機能しませんでした。

その回答における@invertedSpearのコメントは、Firefoxでは機能しましたが、どのバージョンでもIEでは機能しませんでした。

したがって、両方のコードを組み合わせて、これを取得しました。 Googleでテスト済みChrome 31、31、Firefox 25、IE 8-10。ありがとうDrewidと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;
  }
}
104
Vigneshwaran

Navigator.mimeTypesを使用できます。

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

jqplugin: http://code.google.com/p/jqplugin/

$.browser.flash == true
10
mhenry1384

また、使用できるはずです。

swfobject.getFlashPlayerVersion().major === 0

swfobject-Plugin を使用します。

4
user3502163

もともとjustpassinbyが提案したAdobeの検出キットを使用しました。彼らのシステムは、バージョン番号を検出し、それをあなたの「必要なバージョン」と比較するので素晴らしいです

悪い点の1つは、検出されたバージョンのフラッシュを示すアラートを表示することです。これはユーザーフレンドリーではありません。突然、箱が一見ランダムな数字でポップアップします。

あなたが考慮したいかもしれないいくつかの変更:

  • アラートを削除する
  • オブジェクト(または配列)を返すように変更する
2
Mike

http://www.featureblend.com/javascript-flash-detection-library.html (ブールフラッシュ検出のみ)の非常に縮小されたバージョン

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