无法在Chrome扩展程序

时间:2018-06-07 14:25:29

标签: javascript google-chrome google-chrome-extension

我正在尝试使用我的第一个Chrome扩展程序 我偶然发现了一个无法从内容脚本与弹出窗口进行通信的问题。

上下文
我的弹出窗口包含一些localStorage数据,我想从页面刷新/初始化的内容脚本中检索这些数据,这样我就可以在页面上使用这些数据了。

如果我正确理解official documentation,这应该是可能的 它说:

“从内容脚本发送请求如下所示:”

chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
  console.log(response.farewell);
});

所以我试过了,我可以看到上面的代码是从我注入的JS脚本(内容脚本)中触发的,但是我猜我在弹出窗口中没有“正确地”监听它

这是我的代码:

内容脚本(函数在运行时运行)

function getLocalStorageItems() {
chrome.runtime.sendMessage({task: "retrieve-local"}, function(response) 
  {
    console.log(response.farewell);
  });
}

我保持示例功能尽可能完整。

Popup js

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => 
  {
    if ( request.task == "retrieve-local" ) {
      console.log('retrieve-local');
  }
});

清单

{
  "manifest_version": 2,
  "name": "Maxxton Dev Extension",
  "description": "Extension for Maxxton Developers",
  "version": "1.0",
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "index.html"
  },
  "content_scripts": [
    {
      "matches": ["*://*/*"],
      "js": ["injected.js"],
      "run_at": "document_end"
    }
  ]
}

我从未在弹出窗口中看到console.log。

我认为这可能与我正在尝试chrome.runtime.onMessage的事实有关,因为从弹出窗口发送消息是chrome.tabs.query。所以我尝试将其更改为chrome.tabs.onMessage,但这也没有做任何事情。

现在我认为它可能甚至不可能,因为弹出窗口处于休眠/不活动状态。但我不确定。我找不到关于这个问题的任何内容。

1 个答案:

答案 0 :(得分:1)

我用背景scritp做了这个工作。我不知道“browser_action”是如何工作的,但是当我尝试使用“page_action”时,我注意到每当我点击按钮时页面都被重新创建(因此,它可能不存在,如果当前没有弹出则不会监听)。

我建议您将数据保留在后台,并使内容和弹出窗口与后台进行通信。

添加到您的清单:

"background": {
   "scripts": [
     //"you_probably_have_something_here_to_register_browser_action?", 
     "background_data_manager.js", //this will be your script to manage data
   ],
   "persistent": false
},

将您的侦听器和所有代码放在文件background_data_manater.js内处理数据。

要访问后台控制台,请转到Chrome工具,然后打开带有开发者模式的扩展程序页面。您将看到有关您的扩展程序中的视图的一些链接。此链接将打开后台控制台。

您应该在该控制台中看到预期的日志。