我的扩展程序(https://chrome.google.com/webstore/detail/asana2go/meaajmlecpkbjcofehfpjngpnpfpjlkd/related?hl=en-US)正常工作...直到退出并重新启动Chrome。
重启Chrome后,扩展程序内容脚本中的这一行:
chrome.runtime.sendMessage({msg: copyOrPrint, tasksOrSubtasks: tasksOrSubtasks, currentProjectIdOrSearch: currentProjectIdOrSearch, currentProjectName: currentProjectName, tasks: tasks});
我相信已执行,因为上一行是console.log(),并且我在控制台中看到了它的输出。
但是因为在我的后台脚本中我有这个:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log('background listener function');
...
并且我不在控制台中看到“后台侦听器功能”,我得出结论认为sendMessage无法通过或onMessage侦听器未被调用。
您能想到我可以调试的任何地方吗?我正在使用页面的devtools,Inspect Popup devtools和后台脚本页面的devtools窗口,但现在我缩小了范围,但现在很困惑。
同样,在重新启动Chrome并看到发送或接收失败后,我可以通过简单地重新安装扩展程序进行补救,并且一切正常,而且我知道消息既可以发送也可以接收,并且可以正常工作-直到我退出并再次重新启动Chrome。 (如果我在本地运行时未加载或发布负载,也会发生相同的行为。)
由于扩展程序重新安装可以解决问题,所以也许我的chrome.runtime.onInstalled侦听器相关吗?这是它的开始(以上面已经包括的背景脚本中的代码片段结尾):
'use strict';
chrome.runtime.onInstalled.addListener(function() {
let md;
let outputTabId = null;
let messageObj = null;
let cssRules = null;
let requestMsg = null;
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([{
conditions: [new chrome.declarativeContent.PageStateMatcher({
pageUrl: {hostEquals: 'app.asana.com'},
})
],
actions: [new chrome.declarativeContent.ShowPageAction()]
}]);
});
chrome.commands.onCommand.addListener(function(command) { // shortcut keys for copy, print
chrome.tabs.executeScript({code: `ContentScript.sendEls('${command}');`});
});
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log('background listener function');
...
(背景:这是我的第一个扩展,它不是微不足道的,所以我可能出了点问题!很抱歉,我没有提供一个最小且完整的可验证示例,但是扩展文档中的常见消息传递示例并没有提供)不会出现这个问题,而我的大型扩展程序确实会出现。您应该可以通过安装上面链接的扩展程序来重复我的问题,但由于我的扩展程序是Asana的page_action,因此您还需要使用asana.com。
非常感谢您的潜在客户/想法!
拉里
答案 0 :(得分:0)
我的同事解决了这个问题。如问题中的最后一个代码块所示,onMessage侦听器错误地位于onInstalled侦听器内部。
我应该意识到,每次Chrome重新启动时(在扩展程序的初始安装后),这些代码都不会执行/不存在,因此不再有onMessage处理程序可以运行。但是在开发的几周里我从未见过它,因为我很少关闭chrome!而且由于我一直在进行大量开发,因此我一直在不断重新安装扩展程序,因此在我独特的情况下定义了onMessage侦听器-对于大多数用户而言并非如此!
谢谢...