我有一个chrome扩展,它有一个弹出页面,通过简单的一次性请求将一个布尔变量传递给我的内容页面。然后内容页面会根据弹出页面传递的布尔变量的状态执行一些操作。这一直工作得很好,直到我不小心删除了扩展(仍然在开发者模式下,扩展是解压的),不得不重新加载它。
这导致弹出检查控制台中出现扩展上下文无效错误,并且网页控制台似乎正在验证弹出页面和内容脚本未通信。Chrome扩展处于活动状态的网页显示此错误:* * 未检查的运行时。lastError:消息端口在收到响应之前关闭**。
根据我已经看到的一些答案,重新加载我的chrome扩展似乎使我的原始工作内容脚本与我的扩展的其余部分"孤立"了,这导致了前面提到的"Unchecked runtime. lastError:消息端口在收到响应之前关闭。"错误。
我认为我不能再次重新插入我的内容脚本,因为我的内容脚本有DOM事件侦听器。是否有可能删除当前正在运行的孤立脚本?或者是否有针对此问题的建议解决方案?
下面是我的popup.js:
chrome.tabs.query({'active': true, 'currentWindow': true}, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, {cTabSettings: (some boolean variable)});
});
这里是我的内容. js:
// Listening for message from popup.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.cTabSettings === true) {
enabled = true;
} else if (request.cTabSettings === false) {
enabled = false;
}
});
// DOM listener and action
document.addEventListener('mousemove', function (e) {
// Some action
chrome.runtime.sendMessage({sender: "content", selText : "blah"}, function () {
console.log("success");
});
}, false);
我使用的是chrome开发者模式版本76。换句话说,这个chrome扩展在我不小心重新加载之前正在工作**(内容脚本与弹出窗口通信)。
2条答案
按热度按时间3htmauhk1#
由于孤立的内容脚本仍然可以接收DOM消息,例如,通过
window
从新的工作内容脚本发送一个消息到备份的内容脚本。收到消息后,您将注销所有侦听器(并使任何全局变量无效),这也将使旧脚本符合自动垃圾收集的条件。content.js:
popup.js应确保在发送消息之前插入内容脚本:
irlmq6kh2#
请检查this answer
这不是关于删除脚本,而是为了避免错误的情况下。