我正在编写一个chrome扩展,它有一个content.js来操作当前的tab数据以及一个在执行时生成的弹出窗口。但是,我的问题是,当我对扩展进行更改时,我必须重新加载扩展并刷新页面,否则它会给我一个“建立连接错误,端口不存在”错误。这是我的manifest.json文件
MediaPlayer player = new MediaPlayer();
//
// Your player initialisation code here
//
player.setAudioStreamType(AudioManager.STREAM_ALARM);
答案 0 :(得分:3)
这是正常行为。当您在扩展中进行更改时,必须重新加载它。但是当您重新加载扩展时,所有现有内容脚本注入都会丢失与后台页面的连接。更重要的是,如果您尝试重新连接port.onDisconnected.addListener
,出于安全原因,您将收到异常,因为新的后台进程将无法识别其先前的内容脚本注入。
当我遇到这个问题时,我提出了这个解决方案:
reconnect();
function reconnect() {
var port = chrome.runtime.connect({
name: 'injection'
});
port.onMessage.addListener(handleMessage);
port.onDisconnect.addListener(function() {
console.log('bg script disconnected');
setTimeout(function() {
try {
reconnect();
} catch (e) {
location.href = location.href;
}
}, 1000);
});
}
function handleMessage() {
}
我知道,这不仅仅是自动页面重新加载,但是没有其他方法可以重新连接以前的内容脚本注入 - 必须再次注入更新的扩展代码才能连接到后台脚本。 / p>