如何在iOS中自动播放媒体> = 4.2.1 Mobile Safari?

除了用户执行的点击事件的处理程序之外,我似乎无法在iOS 4.2.1上的Mobile Safari上播放audio媒体。 即使如此,如果player.play()以任何asynchronous方式( ajax, setTimeout等)被调用,它不起作用。

我试着在player.load()之前调用player.play() 。 我试过在一个处理程序调用player.play()的dom元素上触发一个click事件。 我试过使用audio和video标签。

所有在iOS 4.2.1之前工作的漏洞似乎都被closures了。 有任何想法吗?

从iOS 4.2.x开始,如果没有用户input事件(如touchstart),则不会启动媒体下载。

所以答案是否定的 ,没有办法通过JavaScript或其他方式自动播放媒体。

有一种方法可以在4.2.1上自动播放video/audio文件。 创build一个iframe,并将其源设置为媒体文件的URL,并将iframe附加到正文。 这将是自动播放。

 var ifr=document.createElement("iframe"); ifr.setAttribute('src', "http://mysite.com/myvideo.mp4"); ifr.setAttribute('width', '1px'); ifr.setAttribute('height', '1px'); ifr.setAttribute('scrolling', 'no'); ifr.style.border="0px"; document.body.appendChild(ifr); 

正如其他人在这里所说的,根据苹果文档,MobileSafari不支持video标签中的自动播放属性。 但是,在iOS 6中,它工作。 这似乎是苹果在iOS 6.0.1中修复的错误(大概是在iOS 6.1中)。

如果您偶然发现在iOS 6.0中工作,请不要依赖iOS 6中的自动播放function。

-Michael

作为一种解决方法,我尝试将load()/ play()代码绑定到单击事件,然后以编程方式触发单击事件。 这种方法在桌面Safari,但不是移动Safari。

这工作在iPad上,直到昨晚4.2升级:

 $(function() { var Beep = document.createElement('audio'); Beep.setAttribute('src', 'beep-23.mp3'); Beep.load(); Beep.play(); } 

我的Beep.play(); 仍然适用于单击事件,但最初的Beep.play()停止工作…

这个怎么样?

使用Sound Manager 2创buildaudio精灵,从第一个用户交互中预加载并caching,然后在需要时播放。

这会工作吗?

支持自动播放(在我的testing中)使用耳机插孔的iPhone 5(iOS 6)。

在运行IOS 6的第三代iPad上,HTML5标签的自动播放function突然开始运作! (我已经安装了IOS6几个星期了,我很确定我马上testing了这个function,但是今天晚上才注意到它正在工作。)我不记得有没有看到苹果的这个消息,尽pipe我看到该移动Safari已被授予支持通过file upload的能力

 <form><input type="file" .../></form> 

– 我需要的另一个function,但苹果已经扣留。

请尝试这个代码,它是同时工作的版本,您需要在页面中dynamic添加audio控制。 这是工作。

 var isiPad = false; if (navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i)) { isiPad = true; } $(function() { if (isiPad) { var audioElement2 = document.createElement('audio'); audioElement2.setAttribute('src', 'img/bgsound.mp3'); audioElement2.controls = true; audioElement2.loop = true; audioElement2.load(); audioElement2.play(); } });