通过js事件在safari浏览器中的iOS 5.x中的声音通知(例如,ajax响应)

Bar*_*art 6 html javascript iphone jquery ios

在iOS浏览器(safari)中,事件触发的声音被阻止(点击 - 一切正常)有没有人知道一个可行的解决方案 - 如何避免它?

示例:ajax聊天消息到达,iphone\ipad发出声音(此时浏览器处于打开状态且活动应用程序)

谢谢您的回答

amp*_*and 5

这些事件被阻止的原因是为了避免任何非用户启动的数据加载(请阅读Apple的解释).这意味着你需要找到一种方法让用户触发加载音频数据.在应用程序运行之前,让用户与页面进行交互.初始化可以通过简单的"touchstart"触发document.body或用户单击以启动应用程序的按钮触发(例如:让用户单击"开始聊天"按钮).在该事件的处理程序中,将音频文件加载到变量并使其可用于应用程序的其余部分.然后在你的ajax成功处理程序中,播放声音:

HTML

<a id="initbutton">Initialize</a>
Run Code Online (Sandbox Code Playgroud)

JS

var sound;
$('#initbutton').one('click',function(ev){
    sound = new Audio("http://soundjax.com/reddo/61767^ding.mp3"); 
    sound.load(); // load the audio data
    sound.volume=1; // make sure the volume is all the way up, though this doesn't work on iOS
});

$.ajax(...,function(data,status,jqxhr){ //presumably this will be triggered by some other code
    if(sound){
        sound.play()
    }
});
Run Code Online (Sandbox Code Playgroud)

请参阅此处的示例.首先尝试初始化音频,然后启动ajax循环,反之亦然.在音频加载之前它将保持静音.

这已经在iPad 2和iPad 4S上的iOS 5.1中进行了测试.我不知道它是否适用于其他设备或旧版iOS.

我不知道有任何其他方法可以使它发挥作用.


rgv*_*ley -2

最好的选择是使用具有 JavaScript API 的媒体播放器。就像是:-

http://www.schillmania.com/projects/soundmanager2/

这允许您通过 javascript 播放文件,并且它使用 html5 或 flash,因此 Safari 无法阻止触发它的事件。