发布更新后,我正在尝试为Chrome扩展程序的用户提供流畅的体验。
我在应用程序更新时重新注入了内容脚本,即使用户继续在扩展程序更新后未刷新的页面上继续使用我的扩展程序,我的功能也起作用。刷新页面是理想的选择,但是我不想强迫用户使用。
但是,在扩展程序更新之后,但在代码尝试从内容脚本/页面发送消息到后台页面时,在刷新页面之前,我的内容脚本控制台(将内容脚本插入的页面)中出现以下错误:
未捕获的错误:扩展上下文无效。
有办法“重建”连接吗?我尝试了长期使用的端口和常规消息传递-更新扩展具有相同的效果。
任何想法/方向表示赞赏。
这是我的简单消息传递代码(在内容脚本中),引发错误...但是可以与后台脚本进行通信:
chrome.runtime.sendMessage({ msg: "recordFeedback", obj: commentObj, source: source}, function(response){
console.log('Sent to DB...response was: ', response, response.recordFeedbackResponse);
});
Run Code Online (Sandbox Code Playgroud) 我有一个带有弹出页面的 Chrome 扩展,它通过简单的一次性请求将布尔变量传递到我的内容页面。然后,内容页面将根据从弹出页面传递的布尔变量的状态执行一些操作。这是完美的,直到我不小心删除了扩展(仍处于开发人员模式,扩展已解压)并不得不重新加载它。
这导致弹出检查控制台中出现扩展上下文无效错误,并且网页控制台似乎验证弹出页面和内容脚本未进行通信。启用 Chrome 扩展程序的网页显示此错误:Unchecked runtime.lastError: The message port returned before a response was returned。
根据我已经看到的一些答案,似乎重新加载我的 chrome 扩展程序已将我的原始工作内容脚本从扩展程序的其余部分中“孤立”出来,这会导致上述“未检查的runtime.lastError:消息端口在已收到回复。” 网页控制台上出现错误。
我相信我不能再次重新注入我的内容脚本,因为我的内容脚本具有 DOM 事件侦听器。有没有可能的方法来删除当前正在运行的孤立脚本?或者有任何建议的解决方法来解决这个问题吗?
这是我的 popup.js:
chrome.tabs.query({'active': true, 'currentWindow': true}, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, {cTabSettings: (some boolean variable)});
});
Run Code Online (Sandbox Code Playgroud)
这是我的 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 …
Run Code Online (Sandbox Code Playgroud)