2011-12-07 9 views
2

私は、オーディオを再生し、さまざまなブラウザにビデオを表示するためにMediaElement.js(ME.js)を使用するWebアプリケーションを作成しています。しかし、私はIE8に問題があります:<audio>要素を持つMediaElementをDOMからインスタンス化すると、Flashオブジェクトが作成されDOMに挿入されますが、メディアはロードされません。エラーは報告されません。代わりに何も起こらない。MediaElement.jsがIE8でメディアを読み込まない

デバッグしようとすると、同じオーディオファイルを再生しようとするME.jsも使用する小さなテストページを作成しました。不思議なことに、このページはうまく動作します。 IE8はファイルをロードして再生します。私は、これらのページの両方がDOMに出力されて何がうまくいかないのかのヒントを得ることができるかどうかを調べようとしました。

これは、Webアプリからである:

<OBJECT id=me_flash_0 codeBase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=1 height=1><PARAM NAME="_cx" VALUE="26"><PARAM NAME="_cy" VALUE="26"><PARAM NAME="FlashVars" VALUE="id=me_flash_0&amp;isvideo=false&amp;autoplay=false&amp;preload=auto&amp;width=1&amp;startvolume=0.8&amp;timerrate=250&amp;height=1&amp;file=http%3A%2F%2Fgsv%2Felearning%2Fapp%2F_dev%2Ftest1.mp3"><PARAM NAME="Movie" VALUE="plugins/flashmediaelement.swf?x=Tue Dec 6 16:06:01 UTC+0100 2011"><PARAM NAME="Src" VALUE="plugins/flashmediaelement.swf?x=Tue Dec 6 16:06:01 UTC+0100 2011"><PARAM NAME="WMode" VALUE="Transparent"><PARAM NAME="Play" VALUE="-1"><PARAM NAME="Loop" VALUE="-1"><PARAM NAME="Quality" VALUE="High"><PARAM NAME="SAlign" VALUE=""><PARAM NAME="Menu" VALUE="-1"><PARAM NAME="Base" VALUE=""><PARAM NAME="AllowScriptAccess" VALUE="always"><PARAM NAME="Scale" VALUE="ShowAll"><PARAM NAME="DeviceFont" VALUE="0"><PARAM NAME="EmbedMovie" VALUE="0"><PARAM NAME="BGColor" VALUE="000000"><PARAM NAME="SWRemote" VALUE=""><PARAM NAME="MovieData" VALUE=""><PARAM NAME="SeamlessTabbing" VALUE="1"><PARAM NAME="Profile" VALUE="0"><PARAM NAME="ProfileAddress" VALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" VALUE="all"><PARAM NAME="AllowFullScreen" VALUE="true"></OBJECT> 

...と、これはテストページからさ:

<OBJECT id=me_flash_0 codeBase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=1 height=1><PARAM NAME="_cx" VALUE="26"><PARAM NAME="_cy" VALUE="26"><PARAM NAME="FlashVars" VALUE="id=me_flash_0&amp;isvideo=false&amp;autoplay=false&amp;preload=auto&amp;width=1&amp;startvolume=0.8&amp;timerrate=250&amp;height=1&amp;file=http%3A%2F%2Fgsv%2Felearning%2Fapp%2F_dev%2Ftest1.mp3"><PARAM NAME="Movie" VALUE="plugins/flashmediaelement.swf?x=Tue Dec 6 16:08:13 UTC+0100 2011"><PARAM NAME="Src" VALUE="plugins/flashmediaelement.swf?x=Tue Dec 6 16:08:13 UTC+0100 2011"><PARAM NAME="WMode" VALUE="Transparent"><PARAM NAME="Play" VALUE="0"><PARAM NAME="Loop" VALUE="-1"><PARAM NAME="Quality" VALUE="High"><PARAM NAME="SAlign" VALUE="LT"><PARAM NAME="Menu" VALUE="-1"><PARAM NAME="Base" VALUE=""><PARAM NAME="AllowScriptAccess" VALUE="always"><PARAM NAME="Scale" VALUE="NoScale"><PARAM NAME="DeviceFont" VALUE="0"><PARAM NAME="EmbedMovie" VALUE="0"><PARAM NAME="BGColor" VALUE="000000"><PARAM NAME="SWRemote" VALUE=""><PARAM NAME="MovieData" VALUE=""><PARAM NAME="SeamlessTabbing" VALUE="1"><PARAM NAME="Profile" VALUE="0"><PARAM NAME="ProfileAddress" VALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" VALUE="all"><PARAM NAME="AllowFullScreen" VALUE="true"></OBJECT> 

お知らせ違いがあります:最初のスニペットでは、<PARAM NAME="Play" VALUE="-1">と第二で述べていますそれは<PARAM NAME="Play" VALUE="0">と言います。これは何とか重要なようですが、私はそれをどのように解釈するのか分かりません。 ME.jsによって生成されるマークアップではなく、.swfファイルがロードされたときに何らかの形で生成されるマークアップではないことを忘れないでください。フラッシュエキスパートではありませんが、私は実際にどのように説明することはできません。

ロードアセットの監視にFiddlerを使用すると、2ページの違いは最初のページが最後のものとして.swfファイルをロードし、2番目のページが.swfファイルをロードしてから.mp3をロードすることです。

Webアプリケーションは、ネイティブHTML要素の代わりにFlashプラグインを使用するように強制すると、Chromeで動作します。

答えて

6

フラッシュオブジェクトは、visibility:hiddenの要素の中にある場合、そのメディアファイルをロードしません。しかしIEでのみ。

関連する問題