我正在尝试使用Knockout动态更改video
标签的视频源。以下是代码:
<div data-bind="if: resource().encodingformats() != ''">
<video style="max-width: 100%;" controls>
<!-- ko with: resource() -->
<source data-bind="attr:{ src: webmUrl }" type='video/webm; codecs="vp8, vorbis"'>
<source data-bind="attr:{ src: oggUrl }" type='video/ogg; codecs="theora, vorbis"'>
<source data-bind="attr:{ src: mp4Url }" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
<!-- /ko -->
</video>
</div>
我正在使用
if
绑定来确保每当当前资源被更改时都会渲染全新的视频标签。
这在除Firefox以外的所有浏览器中都有效。 Firefox会给我一个错误(实际上是警告):
<source> element has no "src" attribute. Media resource load failed.
我猜测
source
元素在没有设置src
属性的情况下被渲染了一瞬间,这导致它崩溃了?有没有简单的方法来解决这个问题?我想我可以绑定整个视频的html,但这似乎太松散了。有没有简单的办法让Firefox与IE9使用相同的代码正常工作?编辑
我还应该提到,在使用Firebug查看生成的html后,我将整个source
标签复制到我的代码中,这很好用。换句话说,我放弃了knockout绑定了一分钟,复制了knockout正在生成的html,并且一切都正常工作。问题肯定是Firefox对如何生成源标记非常挑剔。