2010-11-06

Firefox 3.6+Flash(SWFObject 2.2)+Java Applet(Java 1.6.0_21 以降) 環境でページリロード時に不具合

Flash コンテンツ(埋め込みに SWFObject 利用) + Java Applet コンテンツのある Web ページを Firefox で閲覧する際に発生する不具合について、確認した現象と解決した方法をメモしておきます。


不具合の概要

Flash コンテンツ(埋め込みに SWFObject 2.2 利用)と Java Applet (Java Version 6 Update 21 および 22 ) コンテンツが埋め込まれた Web ページが、 Firefox 3.6.12 で正常動作しなくなっていました。
初回ページロード時には正常動作しますが、リロードすると Java Applet が正常動作しません。Flashは正常動作します。
Java Applet のバージョンを古いもの( Version 6 Update 20 )に戻すと、 Flash も Java Applet も正常動作しました。


実験環境

  • OS: Windows XP SP3
  • ブラウザ:
    • Firefox 3.6.12
    • Internet Explorer 8
    • Chrome 7
    • Safari 5
  • プラグイン:
    • Flash10,1,85,3
      • SWFObject 2.2
    • Java Applet
      • Version 6 Update 20 (1.6.0_20-b02)
      • Version 6 Update 21 (1.6.0_21-b07)
      • Version 6 Update 22 (1.6.0_22-b04: 2010/11/6 現在の最新バージョン)
※ Java Applet 以外はすべて 2010/11/6 現在の最新バージョン


確認した現象

・ Firefox 3.6.12 と、 Java 1.6.0_21 および Java 1.6.0_22 の組み合わせのときに不具合発生。その他の組み合わせのときには正常動作しました。

・不具合発生時に Firebug の接続タブを見ていると、リクエスト自体は完了しますが、 onload 完了までに異常に時間がかかりました(20秒程度)。

初回ページロード時の例:
11件のリクエスト     691.9KB (221.5KB キャッシュから)     2.13s (onload: 1.03s)
ページリロード時の例:
11件のリクエスト     692.7KB (288.3KB キャッシュから)     1.42s (onload: 20.84s)

・不具合発生時に、タスクトレイ内 Java アイコンを右クリックして表示されるメニュー>「1.6.0_22 コンソールを開く」からコンソール画面を開くと、次のようなメッセージが表示されます:
APLLET タグに CODE 属性がありません。
ちなみに実際にはタグに code 属性は記述してあります。
ページリロード時に何らかの理由でオブジェクトの状態がおかしくなっていると予想。

・ unloadEvent 時に、objectタグやその親タグのinnerHTMLを空にしてもしなくても、結果は同じ。

・ SWFObject を利用した Flash コンテンツだけのページ、または Java Applet コンテンツだけのページだと、リロードしても不具合は発生しません。

・ SWFObject を利用しない Flash コンテンツおよび、 Java Applet コンテンツのページだと、正常動作を確認。


解決した方法

解決法1)
SWFObject ライブラリを利用しないで Flash オブジェクト要素および Java Applet オブジェクト要素を書き出す。

という解決方法もありましたが、 Flash インストール判定が便利なのでできれば SWFObject ライブラリを利用したいです。試行錯誤したところ、次の方法でうまくいきました。

解決法2)
SWFObject.embedSWF() の実行タイミング( Flash オブジェクト要素の追加タイミング)と Java Applet オブジェクト要素の追加タイミングを、 DOM 構築完了してから数秒後(今回は 3 秒でうまくいきました)に変更したところ、正常動作しました。

0 件のコメント: