仅在重启Chrome浏览器之后:未发送chrome.runtime.sendMessage()或未调用chrome.runtime.onMessage侦听器功能

时间:2018-07-05 16:57:14

标签: google-chrome-extension

我的扩展程序(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。

非常感谢您的潜在客户/想法!

拉里

1 个答案:

答案 0 :(得分:0)

我的同事解决了这个问题。如问题中的最后一个代码块所示,onMessage侦听器错误地位于onInstalled侦听器内部。

我应该意识到,每次Chrome重新启动时(在扩展程序的初始安装后),这些代码都不会执行/不存在,因此不再有onMessage处理程序可以运行。但是在开发的几周里我从未见过它,因为我很少关闭chrome!而且由于我一直在进行大量开发,因此我一直在不断重新安装扩展程序,因此在我独特的情况下定义了onMessage侦听器-对于大多数用户而言并非如此!

谢谢...