flash - MediaElement.js 不会在 IE8 中加载媒体

标签 flash internet-explorer-8 mediaelement.js

我正在制作一个使用 MediaElement.js 的网络应用程序(ME.js) 用于跨不同浏览器播放音频和显示视频。但是,我在使用 IE8 时遇到了问题:当我用 <audio> 实例化 MediaElement 时DOM 中的元素,flash 对象被创建并插入到 DOM 中,但随后媒体没有被加载。没有错误报告。相反,什么也没有发生。

为了调试它,我创建了一个小的测试页面,它也使用 ME.js 来尝试播放相同的音频文件。奇怪的是,这个页面工作正常。 IE8 加载并播放文件。我试图查看这两个页面在 DOM 中输出的内容,看看我是否能得到有关问题所在的提示。

这是来自网络应用:

<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 文件时以某种方式生成的标记。我不是任何类型的 Flash 专家,无法真正解释如何实现。

当我使用 Fiddler 时为了监控加载了哪些 Assets ,这两个页面之间的区别在于第一个页面加载 .swf 文件作为最后一件事,第二个页面加载 .swf 文件然后加载 .mp3。

我应该提到当我强制它使用 flash 插件而不是 native HTML 元素时,网络应用程序在 Chrome 中工作。

最佳答案

事实证明,如果 flash 对象位于具有 visibility:hidden 的元素内,则不会加载其媒体文件。不过仅在 IE 中。

关于flash - MediaElement.js 不会在 IE8 中加载媒体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8413158/

相关文章:

flash - 如何使舞台的宽度/高度灵活/自动适应闪光灯?

OpenStreetMap 的 Flash 库

java - 实现匿名用户投票

css - IE 无法处理带有 png 的可拖动 div?

javascript - Flash 外部回调错误!

jquery - bxSlider 无法在 IE8 中工作,除非激活开发人员工具

html - plupload跨域上传200 http错误

javascript - MediaElement.js可以用于播放IE6-8,Firefox和Opera的音频吗?

javascript - 如何更改mediaelementjs音频播放器容器的高度?

mediaelement.js - 使用 MediaElement.js 拉伸(stretch)视频以填充 div