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

标签 javascript jquery iphone html ios

在 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/

相关文章:

ios - 从任何 ViewController 打开 SWRevealViewController 时如何使背景 ViewControllers 模糊

iphone - xcode构建错误

iphone - 在 EKEventStore 中检索具有特定标题的 EKEvent

javascript - 如何在 typescript 中更改iframe src属性

javascript - Angular2 - NgIf 无法从订阅访问我的变量

javascript - 类选择器优先于多个唯一 ID

jquery - 使用JQuery Iframe在图片点击上显示YouTube视频弹出窗口

javascript - 缩放至 SVG 文档中的光标位置

javascript - 组合输入并选择输入/更改

jquery - 从代码隐藏方法调用 jQuery 方法