Adobe - デベロッパーセンター : ブラウザの更新に備えたアクティブコンテンツ使用Webサイトの準備 で提供の AC_RunActiveContent.js、Yahoo!天気情報 - ブログパーツの提供を開始しました で提供の weather.js、deconcept › SWFObject: Javascript Flash Player detection and embed script で提供の swfobject_source.js のソースと実地検証から考察してみた。
Flash Player のバージョンを得るポイント
- IE以外は plugin=navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin から取得
plugin=navigator.plugins['Shockwave Flash'] でも取得できるが、Macで QuickTimeでFlashを有効にしている場合、実際使われるプラグインじゃなくなってしまう。 - IEは axo=new ActiveXObject('ShockwaveFlash.ShockwaveFlash.x') から取得 ※xはバージョンによって変わる
- ver2以下: x=なし
- ver3〜5: x=3
- ver6: x=6
- ver7以降: x=7
- axo の場合 GetVariable("$version") で "WIN 6,0,21,0" みたいなバージョン文字列が得られる
ただし、verion 6.0.22〜29はこれを呼ぶとIEがクラッシュする(ほんとにクラッシュする。。)。また、ver3はこれを呼ぶとthrowする。 - plugin の場合、plugin.description から "Shockwave Flash 9.0 r28" みたなバージョン文字列が得られる
ただし、MacでQuickTimeでFlash再生するように設定していると、QuickTimeプラグインの説明文字列が返るので注意
上記をふまえて、"9.0.28" 形式の Flash Player のバージョン文字列を得る 関数は以下のようになるんだろう。
function get_flash_version() {
var version='0.0.0';
if(navigator.plugins && navigator.mimeTypes['application/x-shockwave-flash']){
var plugin=navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin;
// the code below is used in SWFObject
//var plugin=navigator.plugins['Shockwave Flash'];
if (plugin && plugin.description) {
// convert the description like 'Shockwave Flash 9.0 r28' into version string like '9.0.8';
// regex is provided by SWFObject
version=plugin.description.replace(/^[A-Za-z\s]+/, '').replace(/(\s+r|\s+b[0-9]+)/, ".");
}
} else { // in the case of Win IE
var x='';
try {
// for ver.7 and later
var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
x=axo.GetVariable("$version");
} catch(e) {
try {
// for ver.6
axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
x="WIN 6,0,21,0";
/*
* GetVariable() crashes player version 6.0.22-29, and
* players which have those versions throws when access
* to AllowScriptAccess
*/
axo.AllowScriptAccess="always";
x=axo.GetVariable("$version");
} catch(e) {
if (!x.match(/^WIN/)) {
try {
// for 4.x,5.x
axo=null;
axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
// version 3 player throws when you call GetVariale().
x=axo.GetVariable("$version");
} catch(e) {
if (axo) {
// for 3.x
x="WIN 3,0,18,0";
} else {
try {
// for 2.x
axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
x="WIN 2,0,0,11";
} catch(e) {
x="WIN 0,0,0,0";
}
}
}
}
}
}
// convert ActiveX version string to our version string like '9.0.28'
version=x.replace(/^WIN /,'').replace(/,[0-9]+$/,'').replace(/,/g,'.');
}
// check version string format
// Quicktime enabled Safari returns a description in natural language
if (version.match(/^[0-9]+\.[0-9]+\.[0-9]+$/)) {
return version;
} else {
return '0.0.0';
}
}
で、実行結果
groundwalker.com
Comments (1)
AB-ROAD のモアイブログパーツは SWFOjbect 使ってるね。
http://www.ab-road.net/campaign/200706present/moai03/index.shtml
from groundwalker | 2007年08月22日 11:39
2007年08月22日 11:39