Linux の Netscape で代替イメージが表示されない
問題
パブリッシュで書きだした代替イメージ付きの HTML を Linux の Flash Player がインストールされていない Netscape で見ると代替イメージが表示されない。
理由
Flash 4 でパブリッシュした場合以下のスクリプトが挿入されます。
例: test.swf をパブリッシュした場合
(以上省略)
} else if (!(navigator.appName && navigator.appName.indexOf("Netscape")>=0
&& navigator.appVersion.indexOf("2.")>=0)){
document.write('<IMG SRC="test.gif" WIDTH=300 HEIGHT=300 BORDER=0
usemap="#test">');
}
//-->
</SCRIPT>
<NOEMBED><IMG SRC="test.gif" WIDTH=300 HEIGHT=300 usemap="#test"
BORDER=0></NOEMBED>
<NOSCRIPT><IMG SRC="test.gif" WIDTH=300 HEIGHT=300
usemap="#test" BORDER=0></NOSCRIPT>
else if 以下のスクリプトでは、Netscape かバージョンが 2 かを確認し、Netscape バージョン 2 ではない場合 "true" になります。そのため else if 以下のスクリプトが有効になり、代替イメージが挿入されます。なお Netscape 2 の場合は <NOSCRIPT> が有効になり、代替イメージが挿入されます。
Linux の Netscape の場合は、たとえバージョンが 2 以上の Netscape を使用していても、"false" を返します。
理由は、「navigator.appVersion」でブラウザのバージョンと一緒に Linux のカーネルのバージョン (Linux2.x.xx) も取得してしまうためです。この「2.」の数字を取得してしまうために、Netscape 2 以上を使用していても Netscape 2 だと判定してしまい、<NOSCRIPT> を参照します。例えば Netscape 4.5 であれば、この <NOSCRIPT> を認識しないので、なにも表示されないという事態が起こります。
対処法
以下のようなスクリプトを、書き出した HTML ドキュメントの最後の else if 文以降に付け加えることで回避できます。
else if (navigator.platform && navigator.platform.indexOf("Linux")>=0) {
document.write('<IMG SRC="test.gif" WIDTH=300 HEIGHT=300 BORDER=0
usemap="#test">');
}
また、HTML ドキュメントを書き出すごとに直すのは手間がかかりますので、HTML テンプレートを編集することは効率的といえます。
[Macromedia Flash 4J] フォルダ-[HTML] フォルダ内の "Flash3.html" と "Flash4.html" をメモ帳や SimpleText といっようなテキストエディタで開き、最後の else if 文以降に以下の赤文字の部分を付け加えます。
(以上省略)
} else if (!(navigator.appName && navigator.appName.indexOf("Netscape")>=0 && navigator.appVersion.indexOf("2.")>=0)){document.write('<IMG SRC=$IS WIDTH=$IW HEIGHT=$IH BORDER=0 usemap=$IU>');} else if (navigator.platform && navigator.platform.indexOf("Linux")>=0) {document.write('<IMG SRC=$IS WIDTH=$IW HEIGHT=$IH BORDER=0 usemap=$IU>');} //--></SCRIPT>