【发布时间】:2019-12-19 10:45:25
【问题描述】:
我有一个带有弹出页面的 chrome 扩展,它通过简单的一次性请求将布尔变量传递给我的内容页面。然后,内容页面将根据从弹出页面传递的布尔变量的状态执行一些操作。在我不小心删除了扩展程序(仍处于开发人员模式,扩展程序已解压缩)并不得不重新加载它之前,这一直运行良好。
这导致弹出检查控制台中出现扩展上下文无效错误,并且网页控制台似乎验证了弹出页面和内容脚本没有通信。启用 chrome 扩展程序的网页显示以下错误:Unchecked runtime.lastError: The message port closed before a response was received。
根据我已经看到的一些答案,似乎重新加载我的 chrome 扩展程序已经从我的扩展程序的其余部分“孤立”了我的原始工作内容脚本,这导致了前面提到的“Unchecked runtime.lastError: The message port在收到回复之前关闭。”网页控制台出错。
我相信我不能只是再次重新注入我的内容脚本,因为我的内容脚本有 DOM 事件侦听器。有没有可能删除当前正在运行的孤立脚本的方法?或者有什么解决这个问题的建议?
这是我的 popup.js:
chrome.tabs.query({'active': true, 'currentWindow': true}, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, {cTabSettings: (some boolean variable)});
});
这是我的 content.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 扩展正在工作(内容脚本与弹出窗口通信),然后我意外地重新加载了它。
【问题讨论】:
标签: javascript google-chrome google-chrome-extension