我有一个使用Player api(http://www.dailymotion.com/doc/api/player.html)的Dailymotion嵌入式播放器。它适用于桌面和Android平板电脑。但在iOS设备上,视频无法启动。我的代码如下:
<!-- This <div> tag will be replaced the <iframe> video player -->
<div id="player"></div>
<script>
// This code loads the Dailymotion Javascript SDK asynchronously.
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol + '//api.dmcdn.net/all.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(e, s);
}());
// This function init the player once the SDK is loaded
window.dmAsyncInit = function()
{
// PARAMS is a javascript object containing parameters to pass to the player if any (eg: {autoplay: 1})
var player = DM.player("player", {video: 'somevideoid', width: "100%", height: "100%", params: {autoplay: 0}});
// 4. We can attach some events on the player (using standard DOM events)
player.addEventListener("apiready", function(e)
{
e.target.play();
});
};
</script>
答案 0 :(得分:3)
您的代码完全有效。问题在于,大多数移动设备(包括iOS设备)都会阻止视频自动播放(请参阅Apple documentation : Safari HTML5 Audio and Video Guide)。在这些设备上,第一个播放必须由用户交互触发,例如触摸播放按钮,否则浏览器会忽略它。
apiready
事件由Dailymotion SDK触发,不是用户事件。这就是为什么play()
方法对视频没有影响的原因。
[编辑]:您宁愿从另一个事件监听器调用。
此外,由于Dailymotion播放器嵌入在play()
方法,例如click
或touchend
事件。<iframe>
内,因此浏览器始终将父页面与<iframe>
之间的通信视为程序化事件,无论是如果父页面中的原始事件来自用户。
TLDR:在移动设备上,您必须等待用户触摸播放器的开始屏幕。