DOM 更改后 iPad 中的 HTML5 视频无法正常工作

Posted

技术标签:

【中文标题】DOM 更改后 iPad 中的 HTML5 视频无法正常工作【英文标题】:HTML5 Video in iPad not working after DOM changes 【发布时间】:2013-01-08 23:19:50 【问题描述】:

这是一个将 html5 视频的标记附加到 DOM 的脚本:

document.body.innerHTML = '<video id="video" controls="controls" src="http://mirror.cessen.com/blender.org/peach/trailer/trailer_iphone.m4v" type="video/mp4"></video>';
var el = document.getElementById('video');
document.body.removeChild(el);
document.body.appendChild(el);

jsfiddle 演示: http://jsfiddle.net/h8RLS/2/

这适用于所有经过测试的浏览器,ios 上的 Safari 除外。在 iOS 中,当 HTMLVideoElement 重新附加到 DOM 时,它不再可播放。

有其他人解决或遇到过这个问题吗?

【问题讨论】:

【参考方案1】:

我没有 iPad,但可以在 iPhone 上重现您的问题。这似乎是一个 Webkit 错误,但可以通过更改视频的 src 属性轻松绕过它 - 我希望这足以满足您的场景。您可以在此处查看工作演示:

http://vidhtml5.appspot.com/jsembed.html

这是代码:

var el = document.getElementById('video');
el.src= "http://mirror.cessen.com/blender.org/peach/trailer/trailer_iphone.m4v";
el.load();

【讨论】:

我没有要测试的 iPhone,但这不适用于我的第 4 代 iPad。小提琴:jsfiddle.net/nHjRR 我有一个第 4 代 i pad,演示链接对我来说很好用:vidhtml5.appspot.com/jsembed.html @androidUser 该演示没有从 DOM 中删除视频,而是重置了src 属性并调用了reload()。它可以在 iPad 上运行,但恐怕它并不能反映 DOM 更改时产生的问题。请查看我的fiddle,它适用于我在 Windows 和 Android 上测试过的所有浏览器,但不适用于 iPad。【参考方案2】:

我遇到了同样的问题,我找到了一个使用计时器的解决方法(我在这里使用 jQuery)。

var v = $('#videoID');
v.appendTo( $('#toDivID') );
var timer = setInterval( function() 
    clearInterval( timer );
    v[0].load();
    v[0].play();
, 200 );

我只在 iOS 6.1 的 iPad2 上测试过。

【讨论】:

【参考方案3】:

您可以为视频添加两个“来源”标签。我在一个网站上做过这个,效果很好。

<video class="video" controls="controls" id="video1">
<source type="video/mp4" src="demo.mp4">
<source type="video/webm" src="demo.webm">              
</video>

【讨论】:

这与问题无关。 问题是关于动态更改视频,而不是在格式不起作用的情况下提供后备链接(iPad 上的 WebM 就是这种情况)。

以上是关于DOM 更改后 iPad 中的 HTML5 视频无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

iPad 上的 HTML5 视频元素不会触发 onclick 或 touchstart 事件?

如何在移动设备上更改 HTML5 视频的播放速度?

html5 视频无法在 iPad 上播放 - 在 iPhone 上播放

iPad 上不显示 HTML5 视频

iPad/iphone 上的 HTML5 视频背景

在 iPad 上调试 HTML5 视频的方法