Chrome扩展事件页面w/音频永远不会停止

Chrome Extension Event Page w/ Audio Never Stops

本文关键字:永远 音频 事件 扩展 Chrome      更新时间:2023-09-26

我有Chrome扩展,包括一个弹出窗口和一个事件页面,在后台运行。Event页面非常简单:它注册一个onMessage侦听器,当调用该侦听器时,它创建一个Audio对象,并以远程.mp3文件作为源文件并播放它。当Event页面收到另一条消息并且正在播放音频时,它会暂停音频并停止播放。

var audio;
chrome.runtime.onMessage.addListener( function(message, sender, sendResponse) {
    if (audio && !audio.paused) {
        audio.pause();
        audio.src = '';
        audio.load();
        audio = null;
        sendResponse({});
    } else {
        audio = new Audio("http://path/to/audio/file.mp3");
        audio.play();
        sendResponse({});
    }
});

弹出跳转只是向Event页面发送消息以开始播放音频。当事件页面接收到第二条消息时,音频播放良好并停止播放,但问题是,当事件页面接收到第二条消息时,暂停并将音频源设置为空String,事件页面永远不会消失。它会像Background页面一样保存在后台,永远不会进入非活动状态。

我试着这样创建audio变量,看看是否使用Audio构造函数导致了这个问题:

audio = document.createElement('audio');

但它的行为没有任何不同。然后我尝试将preload属性设置为none而不是auto,但无济于事。我想知道如果Chrome正在打开一个套接字来加载mp3文件,并没有正确关闭它,所以事件页面仍然认为它是活跃的,因为打开的套接字,但这只是猜测在这一点上…

我是否需要做一些其他的事情来"卸载"音频,以便事件页面在音频不播放时进入非活动状态?

Chrome升级到36版后,Event页面在Audio元素被卸载后变为非活动