在 iOS 浏览器 (safari) 中,事件触发的声音被阻止(点击 - 一切正常) 有谁知道可行的解决方案 - 如何避免?
示例:ajax 聊天消息到达并且 iphone\ipad 发出声音(此时浏览器打开并且应用程序处于事件状态)
谢谢你的回答
最佳答案
阻止这些事件的原因是为了避免任何非用户启动的数据加载 (read Apple's explanation here)。这意味着您需要想办法让用户触发音频数据的加载。让用户在应用程序运行之前与页面进行交互。初始化可以通过在 document.body
上触发的 “touchstart”
或用户单击以启动应用程序的按钮(例如:让用户单击一个显示“开始聊天”的按钮)。在该事件的处理程序中,将您的音频文件加载到一个变量中,并使其可供应用程序的其余部分使用。然后在您的 ajax 成功处理程序中,播放声音:
HTML
<a id="initbutton">Initialize</a>
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()
}
});
See the example here. 首先尝试初始化音频,然后启动 ajax 循环,反之亦然。在加载音频之前它将保持静音。
这已经在 iPad 2 和 iPhone 4S 上的 iOS 5.1 中进行了测试。我不知道它是否适用于其他设备或旧版本的 iOS。
我不知道有任何其他方法可以让它发挥作用。
关于javascript - iOS 5.x 中 js 事件的 safari 浏览器中的声音通知(例如 ajax 响应),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8945127/