2011-11-18 154 views
15

我正在为有客户端聊天的网站工作,但是,我们遇到了iPad(iOS 5)中音频的问题。在iPad上播放音频

目标实际上是支持IE7的iPad首选。

我已经试过这些方法:

HTML5

<audio id="notification" preload="auto"> 
    <source src="audio/notification.ogg" type="audio/ogg" /> 
    <source src="audio/notification.mp3" type="audio/mpeg" /> 
</audio> 

随着一些JavaScript

var el = document.getElementById('notification'); 
el.play(); 

我偷了一些JavaScript函数某处这实际上在一个功能中是两种不同的方法。请注意脚本在一个子目录中,所以路径是正确的。

function notify() { 
    var url = '../audio/notification.mp3'; 
    var a = document.createElement('audio'); 

    if(!!(a.canPlayType && a.canPlayType('audio/mpeg').replace(/no/, ''))) { 
     var sound = new Audio(url); 
     sound.load(); 
     sound.play(); 
    } else { 
     $('#notification').remove(); 
     var sound = $('<embed id="notification" type="audio/mpeg" src="'+url+'" loop="false" hidden="true" autostart="true" />'); 
     $(body).append(sound); 
    } 
} 

这两种方法似乎都不起作用。难道我做错了什么?

回答

25

那么,答案是显而易见的。

很多时间支出做研究后等,我发现Safari浏览器的官方文档中an article说:

在Safari浏览器在iOS(所有设备,包括iPad的),其中用户可在蜂窝网络上并按每个数据单元收费,预先加载和自动播放被禁用。直到用户启动它才会加载数据。这意味着,除非用户操作触发play()或load()方法,否则JavaScript play()和load()方法在用户启动播放之前也处于非活动状态。换句话说,用户启动的播放按钮可以工作,但onLoad =“play()”事件不会。

因此,基本上,如果用户一开始没有触发,就无法启动声音。作为解决方案,我创建了一个默认关闭的静音按钮,因此您必须单击播放通知声音的按钮。之后,我可以使用Javascript在没有用户交互的情况下播放声音。

谢谢Safari浏览器为这个伟大的未来。非常感谢。

+1

有趣的东西! –

+4

Gah,加入Apple后,用户操作正在加载网页,因此需要*两个用户操作(加载一个页面,然后执行其他操作)。尝试触发本机键盘时出现同样的问题。 –

+0

@Tim S:你是说,对于给定的网页:一旦用户加载页面,然后点击播放按钮,你可以随时播放音频,只要你喜欢在该页面上?说,回应一个鼠标悬停事件? –

-1

尝试将MP3作为第一个来源而不是第二个来源。 iPad曾经有一个问题,无论它是什么(它现在可能已经被修复 - 但它是值得一试的),它始终扮演着第一个来源。

也尝试将type更改为audio/mp3

+0

不幸的是,两者都没有工作。尽管感谢您的回答。 –

+0

奇数。你是否证实它可以在桌面浏览器上运行?所以你可以确保音频文件的路径是正确的? –

+1

我可以肯定,它确实在桌面上工作。另外,如果iPad实际上是这样的声音,哈哈! –

4

如果没有用户点击之前启动它,Apple iPad不允许播放声音。

解决方案:添加播放/暂停按钮。

App.toggle_audio = function(elem) { 
    var icon = elem.find("i"); 
    var playing = _.include(icon.attr('class').split(" "), "icon-pause") 
    if (playing) { 
    elem.html("<i class='icon-play'></i> " + App.translate_play_audio); 
    App.play_audio_toggle = false; 
    } else { 
    App.audio_file.load(); 
    elem.html("<i class='icon-pause'></i> " + App.translate_pause_audio); 
    App.play_audio_toggle = true; 
    } 
} 

一旦用户点击按钮,一旦加载了音频。然后你可以通过Javascript播放它。

if (App.play_audio_toggle) { 
    App.audio_file.play(); 
    } 
+7

我偶然发现了这个问题,并找到了解决这个问题的方法。然后决定发布我用来帮助他人的代码。 – Hendrik

6

与iOS 6的一个onload在发布iPad的音频播放仍然不支持为iPad。

对于使用iOS 6的iPhone,音频只能在HTML网站的onLoad中播放,如果耳机插入iPhone的音频插孔。

+1

OMG认真,LOL。 – Aaron