ActiveX コントロール アクティブ化の裏ワザ

2006年4月のWindowsアップデートでインターネットエクスプローラーの仕様変更があり
ホームページ訪問者は、APPLET 、EMBED、または OBJECT タグによってページに取り込まれたJava、Flash、MadiaPlayerなどのMicrosoft ActiveX コントロールを直接操作できなくなった。
これらのコントロールを操作するには、再生ボタンなどのユーザー インターフェイスをアクティブ化する(使えるようにする)操作が必要になりました。
その操作をしないと、うるさく右のようなコメントが表示されます。
詳細はMicrosoftのサイト参照

外部スクリプト ファイル
従来通りすぐに応答するページを作成するには、 外部スクリプト ファイルにJavaScriptの、document.write を使って、APPLET 、EMBED、または OBJECT タグを書かせる記述をし、HTMLファイルには外部ファイルを結合する記述をします。
具体例を挙げるとムービーファイル「example.wmv」を上映するページのソースは
HTML ファイル外部ファイル「embed.js

<html>
<head><title></title></head>
  <body>
   <embed src="example.wmv">
  </body>
</html>

<html>
<head><title></title></head>
  <body>
    <script src="embed.js"></script>
  </body>
</html>

document.write('<embed src="example.wmv">')
と記述するようにMicroSoftのサイトでは説明されています

外部ファイルの汎用化・共用化
しかし、この方法では、個々のページごとに外部ファイルを作らなければならず、これまで作ってきたページの改造や、今後の個々のページの維持が大変です。
そこで、いろいろとテストしてみた結果、1つの外部ファイルで、すべてのページ、すべてのActiveX コントロールに汎用的に対応できそうなので、その裏ワザを紹介します。
(実験でできたということで、文法的に保証されたものではないので、将来にわたって使えるかは解りません)

1、汎用の外部ファイル「activ.js」に、与えられた文字列をページに書き込む関数を書きます。
2、HTMLに外部ファイルを結合し、該当のembedタグを文字列の引数にして、関数を呼び出します。
HTML ファイル外部ファイル「activ.js

<html>
  <head>
    <title></title>
    <script src="activ.js"></script>
  </head>
  <body>
    <script>
	activ('<embed src="example.wmv">')
    </script>
  </body>
</html>

function activ(p){
   document.write(p);
}
外部ファイルの結合は
<script src="http://www2a.biglobe.ne.jp/~qpon/activ/activ.js"></script>
のようにフルパスで書けば、すべてのページから1つのファイルを共用できるようになります。 HTMLは従来のタグを残したまま、
    <script>
	activ('<embed src="example.wmv">')
   </script>
のように前後にJavascriptの記述を追加するだけの改造になります。

先頭タグのみ外部記述
文字列の途中には改行が許されないので、多くのパラメーターを使っている物になると、書き辛いこともある。 最初のタグだけ外部ファイルに書かせれば、後はHTML文のままでもよさそうです。
  • FLASHの場合
    HTMLタグでの記述最初のタグだけ外部ファイルで書き込み
    ');
    マウスを乗せると表示がうるさい 従来どおり、マウスを乗せても表示は出ない
    デモは浮浪草さんの作品です

    HTMLタグでの記述
    <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="300" height="300">
    <PARAM NAME="movie" VALUE="haruurara.swf">
    <PARAM NAME="quality" VALUE=high>
    <PARAM NAME="bgcolor" VALUE=#000000>
    <EMBED src="haruurara.swf" width="300" height="300">
    </OBJECT>

    最初のタグだけ外部ファイルで書き込み
    <script type="text/javascript" src="http://qpon.quu.cc/activ/activ.js">
    <script type="text/javascript">
    activ('<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" WIDTH="400" HEIGHT="300">');
    </script>

    <PARAM NAME="movie" VALUE="haruurara.swf">
    <PARAM NAME="quality" VALUE=high>
    <PARAM NAME="bgcolor" VALUE=#000000>
    <EMBED src="haruurara.swf" width="300" height="300">
    </OBJECT>



  • JAVAの場合


    デモは松本さんの作品です


    最初のタグだけ外部ファイルで書き込み
    <script src="http://qpon.quu.cc/activ/activ.js"></script>
    <script>
    activ('
    <APPLET CODE="AquariumCityLite.class" WIDTH=640 HEIGHT=430>');
    </script>

    <PARAM NAME="copyright" value="www.javao.com">
    <PARAM NAME="regcode" value="okohihs-ika-84919040">
    <PARAM NAME="background" value="okinawa-1.jpg">
    <PARAM NAME="bgcolor" value="000075">
    <PARAM NAME="sleeptime" value="80">
    <!PARAM NAME="loadingstatus" value="yes">
    <PARAM NAME="ReverseImage" value="4">
    <PARAM NAME="ReverseLocation" value="0">
    <PARAM NAME="ReverseType" value="1">
    <PARAM NAME="ReverseLayer" value="1">
    <PARAM NAME="ReverseRight" value="4">
    <PARAM NAME="ReverseLeft" value="4">
    <PARAM NAME="ReverseRange" value="7">
    <PARAM NAME="imagenumber" value="8">
    <PARAM NAME="target" value="_top">
    <PARAM NAME="changedirection" value="yes">
    <PARAM NAME="rimage" value="
    |0|0|0|0|600|-10|*|,okinawa-1.gif|0|0|0|0|600|-10|*|,
    |*|,
    |0|0|0|0|600|-10|492|422| | |0|0|*|,

    |0|0|0|0|490|-22|492|390| |103|355|999|0|0|0|0|0|ffffff|*|,

    |10|382|0|0|332|-45|90|55| |95|20|999|0|0|0|0|0|000000|*|,

    |10|342|0|0|450|-45|90|55| |94|27|999|0|0|0|0|0|ffffff|*|,
    |*|,

    |0|0|0|0|600|-10|*|,okinawa-1.gif|0|0|0|0|600|-10|*|,
    |*|,
    |0|0|0|0|600|-10|528|415| | |0|0|*|,
    |*|,
    |*|,
    |*|,
    |*|">
    </applet>

    <注>「http://qpon.quu.cc/activ/activ.js」は自分が外部ファイルを置いたのアドレスに書き換えてください


    IE用タグの利用
    サウンドやビデオの再生は外部ファイル化をしなくても、bgsoundやimg dynsrcといったIE専用タグを使用し、IE以外のブラウザには、従来通りembedタグで再生するようにすればよい。
    ビデオサウンド
    <embed src="example.wmv">
    
    <embed src="example.mid">
    
    <script>
    nav=navigator.appName.substring(0,1);
    if(nav=="M"){
    document.write('<img dynsrc="example.wmv">');
    }else{
    document.write('<embed src="example.wmv">');
    }
    </script>
    
    最新版のMediaPlayerでは
    dynsrcが機能しない場合があるようです
    
    
    <script>
    nav=navigator.appName.substring(0,1);
    if(nav=="M"){
    document.write('<bgsound src="example.mid">');
    }else{
    document.write('<embed src="example.mid">');
    }
    </script>