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'; } }
で、実行結果
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