ブラウザが埋め込まれたフラッシュコンテンツを表示できるかどうかを検出するために、IE /Firefox全体で確実に機能するスクリプトの例を誰かが持っていますか?100%不可能だとわかっているので、確実に言います。
16 に答える
私はマックス・スチュワートに同意します。 SWFObjectがその方法です。コード例で彼の答えを補足したいと思います。これで始められるはずです:
swfobject.js
ファイルが含まれていることを確認してください(ここから入手してください):
<script type="text/javascript" src="swfobject.js"></script>
次に、次のように使用します。
if(swfobject.hasFlashPlayerVersion("9.0.115"))
{
alert("You have the minimum required flash version (or newer)");
}
else
{
alert("You do not have the minimum required flash version");
}
「9.0.115」を、必要な最小フラッシュ バージョンに置き換えます。例として 9.0.115 を選択しました。これは、h.264 サポートを追加したバージョンだからです。
訪問者がフラッシュを持っていない場合、「0.0.0」のフラッシュ バージョンが報告されるため、フラッシュがあるかどうかだけを知りたい場合は、次を使用します。
if(swfobject.hasFlashPlayerVersion("1"))
{
alert("You have flash!");
}
else
{
alert("You do not flash :-(");
}
SWFObjectは非常に信頼性があります。しばらく問題なく使えています。
これが古い投稿であることは知っていますが、しばらく探していましたが、何も見つかりませんでした。JavaScript Flash Detection Library
を実装しました。それは非常にうまく機能し、すぐに使用できるように文書化されています。文字通り2分かかりました。ヘッダーに書いたコードは次のとおりです。
<script src="Scripts/flash_detect.js"></script>
<script type="text/javascript">
if (!FlashDetect.installed) {
alert("Flash is required to enjoy this site.");
} else {
alert("Flash is installed on your Web browser.");
}
</script>
クロージャ コンパイラを使用して、小さなクロスブラウザ フラッシュ検出を生成できます。
// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// @formatting pretty_print
// @use_closure_library true
// ==/ClosureCompiler==
// ADD YOUR CODE HERE
goog.require('goog.userAgent.flash');
if (goog.userAgent.flash.HAS_FLASH) {
alert('flash version: '+goog.userAgent.flash.VERSION);
}else{
alert('no flash found');
}
これにより、次の「コンパイル済み」コードが生成されます。
var a = !1,
b = "";
function c(d) {
d = d.match(/[\d]+/g);
d.length = 3;
return d.join(".")
}
if (navigator.plugins && navigator.plugins.length) {
var e = navigator.plugins["Shockwave Flash"];
e && (a = !0, e.description && (b = c(e.description)));
navigator.plugins["Shockwave Flash 2.0"] && (a = !0, b = "2.0.0.11")
} else {
if (navigator.mimeTypes && navigator.mimeTypes.length) {
var f = navigator.mimeTypes["application/x-shockwave-flash"];
(a = f && f.enabledPlugin) && (b = c(f.enabledPlugin.description))
} else {
try {
var g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"),
a = !0,
b = c(g.GetVariable("$version"))
} catch (h) {
try {
g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"), a = !0, b = "6.0.21"
} catch (i) {
try {
g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), a = !0, b = c(g.GetVariable("$version"))
} catch (j) {}
}
}
}
}
var k = b;
a ? alert("flash version: " + k) : alert("no flash found");
私が今まで使用した最小バージョン (バージョンはチェックせず、Flash プラグインのみ):
var hasFlash = function() {
return (typeof navigator.plugins == "undefined" || navigator.plugins.length == 0) ? !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) : navigator.plugins["Shockwave Flash"];
};
Carl Yestrau の JavaScript Flash Detection Library は次のとおりです。
http://www.featureblend.com/javascript-flash-detection-library.html
...あなたが探しているものかもしれません。
おそらく、adobeのフラッシュプレーヤー検出キットがここで役立つ可能性がありますか?
http://www.adobe.com/products/flashplayer/download/detection_kit/
isFlashExists
1つのライナー変数のコード:
<script type='text/javascript'
src='//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js'> </script>
<script type='text/javascript'>
var isFlashExists = swfobject.hasFlashPlayerVersion('1') ? true : false ;
if (isFlashExists) {
alert ('flash exists');
} else {
alert ('NO flash');
}
</script>
次のような代替手段があることに注意してください。swfobject.getFlashPlayerVersion();
Flash を検出して Web ドキュメント内に埋め込むことは、驚くほど難しい作業です。
SWFObject とアドビのソリューションの両方から生成されたマークアップの品質と非標準に非常に失望しました。さらに、私のテストでは、Adobe の自動アップデーターは一貫性がなく、信頼できないことがわかりました。
JavaScript Flash 検出ライブラリ (Flash Detect)とJavaScript Flash HTML ジェネレータ ライブラリ (Flash TML)は、読みやすく、保守しやすく、標準に準拠したマークアップ ソリューションです。
-「ルークはソースを読んでください!」
http://whatsmy.browsersize.comでソースを表示します(14 ~ 120 行目)。
これは、フラッシュ検出専用の jsbinで抽象化されたクロス ブラウザーコードです。FF /IE/Safari/Opera/Chrome で動作します。
純粋な Javascript ソリューションに興味がある場合は、Brettからコピーしたものを次に示します。
function detectflash(){
if (navigator.plugins != null && navigator.plugins.length > 0){
return navigator.plugins["Shockwave Flash"] && true;
}
if(~navigator.userAgent.toLowerCase().indexOf("webtv")){
return true;
}
if(~navigator.appVersion.indexOf("MSIE") && !~navigator.userAgent.indexOf("Opera")){
try{
return new ActiveXObject("ShockwaveFlash.ShockwaveFlash") && true;
} catch(e){}
}
return false;
}
フラッシュが有効になっているかどうかを確認したいだけなら、これで十分です。
function testFlash() {
var support = false;
//IE only
if("ActiveXObject" in window) {
try{
support = !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash"));
}catch(e){
support = false;
}
//W3C, better support in legacy browser
} else {
support = !!navigator.mimeTypes['application/x-shockwave-flash'];
}
return support;
}
注: enabledPluginのチェックは避けてください。一部のモバイル ブラウザーには、タップして有効にするフラッシュ プラグインがあり、誤検知をトリガーします。
.swf
リダイレクトする小さなものを作成しました。ブラウザがフラッシュ対応の場合、リダイレクトされます。
package com.play48.modules.standalone.util;
import flash.net.URLRequest;
class Redirect {
static function main() {
flash.Lib.getURL(new URLRequest("http://play48.com/flash.html"), "_self");
}
}
標準に準拠した (ただし JavaScript を使用する) Flash オブジェクトを作成するには、以下を参照することをお勧めします。
控えめなフラッシュ オブジェクト (UFO)