« Flash ブログパーツの埋め込み | メイン | Flash: 古い Flash Player (ActiveX) のインストール方法 for IE »

Javascript による Flash Player のバージョン取得

あとで読む

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';
 }
}

で、実行結果

Flash version is

Trackbacks

Trackback URL:
http://groundwalker.com/mt/gwtb.cgi/338

» Flash ブログパーツの埋め込み from groundwalker.com
Flash(swf)ブログパーツをHTML内に配置(デプロイ)する方法として、よく見かけるのは、scriptタグでjavascriptを読み込ませ、動的... [More...]

Comments (1)

groundwalker:

AB-ROAD のモアイブログパーツは SWFOjbect 使ってるね。
http://www.ab-road.net/campaign/200706present/moai03/index.shtml

« Flash ブログパーツの埋め込み | メイン | Flash: 古い Flash Player (ActiveX) のインストール方法 for IE »

スポンサー

関連ブログ

あわせて読みたい

関連キーワード

Powered by
Movable Type 3.34

連絡先