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タグでの記述
|
<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>
|
|