www.vis-ta.com  vis-ta.comはWindowsVistaを応援しています。
 
IE更新プログラムをJavaScriptで回避する
 
IE更新プログラムによるFlashコンテンツのコントロールのアクティブ化を回避する方法
クリックしてアクティブ化しないと使えないFlash

  Microsoft社(MS)が、Eolas社の特許を侵害したとして提訴された訴訟関連で、 「object、embed、および applet タグが読み込まれるたびに確認ダイアログを出す」というActiveX対応がいよいよ現実のものとなりました。

  これまで Windows Update で「推奨される更新プログラム」として配布されてきた上記のパッチ「KB912945」が、他のセキュリティ修正と同梱され、「Internet Explorer 用の累積的なセキュリティ更新プログラム」としてリリースされました。

  具体的に何が起こるのかといいますと、objectやembedタグで書かれたFlashなどのActivXコンテンツは、一度、ユーザーがクリックするなどの動作をするまでは動かなくなる、ということです。




  更新プログラムを適用したIEで、マウスを乗せると、左記のようなチップがあらわれ、クリックすると使えるようになります。
  つまり、クリックするまでは使えないのです。


対策として,JavaScriptによって回避する。

「object,embed」タグで記述されたコンテンツ

左のFlashコンテンツにマウスを乗せたとき,上記のような反応を示す場合,お使いのブラウザ(Internet Explorer)は更新プログラムが適用されています。

再度,試してみるときは下のボタンをクリック。
このコンテンツの記述は,>>> HTMLソース
  <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
   codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
   WIDTH="300" HEIGHT="150" id="bus" ALIGN="">
    <PARAM NAME=movie VALUE="bus.swf">
    <PARAM NAME=quality VALUE=high>
    <PARAM NAME=bgcolor VALUE=#FFFFFF>
    <EMBED src="bus.swf" quality=high bgcolor=#FFFFFF  WIDTH="300" HEIGHT="150" NAME="bus" ALIGN=""
     TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
    </EMBED>
  </OBJECT>


javascriptで記述されたコンテンツ

左のFlashコンテンツにマウスを乗せたとき,更新プログラムの適用前と同じように,直接「プレイ」ボタンをクリックすることができます。

再度,試してみるときは下のボタンをクリック。
これは,外部.jsファイルによって回避していますが,それについて解説します。


【解説】

1 フォルダ内には次の3つのファイルが存在します。

@ bus.htm (Flashコンテンツを表示) 
A flashitoben.js (javascriptの外部ファイル)
B bus.swf (Flashコンテンツ)


2 bus.htmのソース
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML>
 <HEAD>
 <meta http-equiv=Content-Type content="text/html;  charset=SHIFT_JIS">
 <TITLE>bus</TITLE>
 <!-- 下記の記述により,外部ファイルのflashitoben.jsを呼び出します -->
 <script language='JavaScript' src='flashitoben.js'></script>
 </HEAD>
 <BODY>

 <!-- 下記スクリプトで,Flashコンテンツを書き出します -->
 <script language='JavaScript'>
 <!--
 writeFlashHTML2('_swf=bus.swf','_height=150','_width=300','_quality=high') // ()内でFlashの属性を指定します
 //-->
 </script>
 
 </BODY>
 </HTML>


3 flashitoben.jsの記述
/*====================================================================
 * Flash用 EMBEDとOBJECTタグを書き出す関数2          useFree
 *--------------------------------------------------------------------
 * http://allabout.co.jp/computer/javascript/closeup/CU20031226/
 */

function writeFlashHTML2( arg )
{
  
  /**
   * 引数から属性を抽出する
   */
   
  var parm = []
  
  //すべての引数を順番に
  for( i = 0 ; i < arguments.length ; i++ )
  {
    //属性名と属性値をあらわす文字列を配列parmへセットする(半角空白は除去)
    parm[i] = arguments[i].split(' ').join('').split('=')
    
    //有効な属性名があれば属性値で変数化( 無効な名前は無視 )
    switch (parm[i][0])
    {
      case '_swf'     : var _swf     = parm[i][1] ; break ; // フラッシュのURL  例えば '_swf=bus.swf'
      case '_quality' : var _quality = parm[i][1] ; break ; // 画質  例えば '_quality=high'
      case '_loop'    : var _loop    = parm[i][1] ; break ; // 繰り返し
      case '_bgcolor' : var _bgcolor = parm[i][1] ; break ; // 背景色
      case '_wmode'   : var _wmode   = parm[i][1] ; break ; // 背景透明(WinIEのみ)  例えば '_wmode=transparent'
      case '_play'    : var _play    = parm[i][1] ; break ; // 自動再生
      case '_menu'    : var _menu    = parm[i][1] ; break ; // 右クリックメニュー  例えば '_menu=false'
      case '_scale'   : var _scale   = parm[i][1] ; break ; // 幅高さが%の時の縦横比等
      case '_salign'  : var _salign  = parm[i][1] ; break ; // 表示領域内表示位置
      case '_height'  : var _height  = parm[i][1] ; break ; // ムービーの高さ
      case '_width'   : var _width   = parm[i][1] ; break ; // ムービーの幅
      case '_hspace'  : var _hspace  = parm[i][1] ; break ; // まわりの余白(水平方向)
      case '_vspace'  : var _vspace  = parm[i][1] ; break ; // まわりの余白(垂直方向)
      case '_align'   : var _align   = parm[i][1] ; break ; // 表示位置
      case '_class'   : var _class   = parm[i][1] ; break ; // クラス
      case '_id'      : var _id      = parm[i][1] ; break ; // ID名
      case '_name'    : var _name    = parm[i][1] ; break ; // ムービー名
      case '_style'   : var _style   = parm[i][1] ; break ; // スタイル
      case '_declare' : var _declare = parm[i][1] ; break ; // 読み込まれるだけで実行しない
      default        :;
    }
  }
  

  // タグ用文字列生成
  var htm = ""
  
  htm+="<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000'"
  htm+="        codebase='http://download.macromedia.com/pub/shockwave/"
                    htm+="cabs/flash/swflash.cab'"
  if(!!_width)   htm+="        width    = '" + _width   + "'"
  if(!!_height)  htm+="        height   = '" + _height  + "'"
  if(!!_hspace)  htm+="        hspace   = '" + _hspace  + "'"
  if(!!_vspace)  htm+="        vspace   = '" + _vspace  + "'"
  if(!!_align)   htm+="        align    = '" + _align   + "'"
  if(!!_class)   htm+="        class    = '" + _class   + "'"
  if(!!_id)      htm+="        id       = '" + _id      + "'"
  if(!!_name)    htm+="        name     = '" + _name    + "'"
  if(!!_style)   htm+="        style    = '" + _style   + "'"
  if(!!_declare) htm+="                    " + _declare  
  htm+=">"
  if(!!_swf)     htm+="<param  name     = 'movie'   value ='" + _swf     + "'>"
  if(!!_quality) htm+="<param  name     = 'quality' value ='" + _quality + "'>"
  if(!!_loop)    htm+="<param  name     = 'loop'    value ='" + _loop    + "'>"
  if(!!_bgcolor) htm+="<param  name     = 'bgcolor' value ='" + _bgcolor + "'>"
  if(!!_play)    htm+="<param  name     = 'play'    value ='" + _play    + "'>"
  if(!!_menu)    htm+="<param  name     = 'menu'    value ='" + _menu    + "'>"
  if(!!_scale)   htm+="<param  name     = 'scale'   value ='" + _scale   + "'>"
  if(!!_salign)  htm+="<param  name     = 'salign'  value ='" + _salign  + "'>"
  if(!!_wmode)   htm+="<param  name     = 'wmode'   value ='" + _wmode   + "'>"
  htm+=""
  htm+="<embed                          "
  htm+="        pluginspage='http://www.macromedia.com/go/getflashplayer'"
  if(!!_width)   htm+="        width    = '" + _width   + "'"
  if(!!_height)  htm+="        height   = '" + _height  + "'"
  if(!!_hspace)  htm+="        hspace   = '" + _hspace  + "'"
  if(!!_vspace)  htm+="        vspace   = '" + _vspace  + "'"
  if(!!_align)   htm+="        align    = '" + _align   + "'"
  if(!!_class)   htm+="        class    = '" + _class   + "'"
  if(!!_id)      htm+="        id       = '" + _id      + "'"
  if(!!_name)    htm+="        name     = '" + _name    + "'"
  if(!!_style)   htm+="        style    = '" + _style   + "'"
  htm+="        type     = 'application/x-shockwave-flash' "
  if(!!_declare) htm+="                    " + _declare  
  if(!!_swf)     htm+="        src      = '" + _swf     + "'"
  if(!!_quality) htm+="        quality  = '" + _quality + "'"
  if(!!_loop)    htm+="        loop     = '" + _loop    + "'"
  if(!!_bgcolor) htm+="        bgcolor  = '" + _bgcolor + "'"
  if(!!_play)    htm+="        play     = '" + _play    + "'"
  if(!!_menu)    htm+="        menu     = '" + _menu    + "'"
  if(!!_scale)   htm+="        scale    = '" + _scale   + "'"
  if(!!_salign)  htm+="        salign   = '" + _salign  + "'"
  htm+="></embed>"
  htm+="</object>"

  //書き出し処理
  document.write(htm)
  
}