Javascript 从非活动浏览器选项卡播放声音

Javascript 从非活动浏览器选项卡播放声音,javascript,google-chrome,audio,browser,Javascript,Google Chrome,Audio,Browser,我有一个餐厅控制面板,它在下订单时会发出警报声。问题是,当控制面板选项卡不是Chrome中的活动选项卡(Firefox也是如此)时,警报声音不会播放。单击选项卡后,将播放声音 我看到一些网站(Facebook聊天、Cloudstats.me服务器警报等)即使处于非活动状态也会播放声音,那么解决这个问题的方法是什么呢?如果我也遇到类似的情况,我们试图在当天股市开盘和收盘时播放市场时钟。我们遇到的问题是,我们试图加载mp3,然后在条件满足时播放它。原来是这样 var bell; // Update

我有一个餐厅控制面板,它在下订单时会发出警报声。问题是,当控制面板选项卡不是Chrome中的活动选项卡(Firefox也是如此)时,警报声音不会播放。单击选项卡后,将播放声音


我看到一些网站(Facebook聊天、Cloudstats.me服务器警报等)即使处于非活动状态也会播放声音,那么解决这个问题的方法是什么呢?

如果我也遇到类似的情况,我们试图在当天股市开盘和收盘时播放市场时钟。我们遇到的问题是,我们试图加载mp3,然后在条件满足时播放它。原来是这样

var bell;

// Update the clock, countdown, and tooltips as needed.
function updateClock() {
    service.getMarketDate(function(data) {

        if (data.soundMarketBell) {
            if (!bell) {
                bell = new Audio('/sounds/marketclock.mp3');
            }
            bell.play();
        }
    });
}

var intervalId = $interval(updateClock, 1000);
通过将资源加载移动到页面加载上,然后只调用Audio.play,解决了这个问题

var bell = new Audio('/sounds/marketclock.mp3');

// Update the clock, countdown, and tooltips as needed.
function updateClock() {
    service.getMarketDate(function(data) {
        if (data.soundMarketBell) {
            bell.play();
        }
    });
}

// check for a time update every second
// to balance accuracy with performance
var intervalId = $interval(updateClock, 1000)

当选项卡处于非活动状态时,浏览器会限制加载资源。由于浏览器的自动播放策略,音频也可能无法播放

例如,在Chrome中,只有用户主动单击网页,音频才会播放

您可以在此处找到完整列表:

我希望看到一些关于这方面的文档:“浏览器在选项卡处于非活动状态时限制加载资源”我不确定解释是否正确。下载mp3文件需要时间,因此音频对象第一次(至少)没有准备好,导致“播放”失败。将行移动到脚本顶部会在加载脚本后立即加载文件,以便可以播放该文件。