Chrome扩展程序中未收到消息

时间:2017-12-29 02:36:39

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

我正在构建Chrome扩展程序,以跟踪我在某些网站上花费的时间。我只想在活动标签中计算时间。因此,我的扩展程序页面onUpdate

中有background.js个事件监听器

加载页面时,onUpdate事件会多次触发,但这些事件中只有一个是更改网址。您可以在此处查看有关此问题的进一步说明:Chrome extension, javascript: Why is this firing twice?,但这不是我的问题。因此,changeInfo个对象中只有一个具有url属性。

我想从onUpdate事件中获取新网址,并使用它来确定要发送到我的内容脚本的邮件。我可以在任何情况下向内容脚本发送消息,但是当我在onUpdate事件之后引入检查以确保我只在有URL属性时触发,我的onMessage事件内容脚本停止触发。这是代码:

background.js

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
  if (changeInfo.url) {
    chrome.storage.sync.set({'on_site1': "true"}, function() {
      chrome.tabs.sendMessage(tabId, {"message": "moved_to_site1"}, function() {});
    });
  }
})

content.js

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    chrome.runtime.sendMessage({"message": "this is a response"});
    if (request.message === "tab_changed") {
      foo1();
    } else if (request.message === "moved_to_site1") {
      foo2();
    } else {
      foo3();
    }
  }
);

在上述条件下,onMessage事件不会触发。诀窍在background.js,在这里。当它更改为以下内容时:

background.js

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
  chrome.storage.sync.set({'on_site1': "true"}, function() {
    chrome.tabs.sendMessage(tabId, {"message": "moved_to_site1"}, function() {});
  });
})

现在在onMessage中触发content.js事件,一切正常,但这不允许我检查我更改的URL。我需要能够在发送消息之前检查URL是什么,我无法弄清楚这个奇怪问题的解决方法,甚至是为什么会发生这种情况。任何见解都将不胜感激。

0 个答案:

没有答案