从background.js发送到contentScript.js

时间:2014-11-13 02:26:07

标签: javascript google-chrome-extension

我做了文档中的内容,但在后台页面中显示Cannot read property 'farewell' of undefined错误。

我的background.js

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
  chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
   console.log(response.farewell);
    console.log('ytr');
  });
});

发送消息是因为我的console.log('test')打印出来了。

我的contentScript.js看起来像这样

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    console.log(sender.tab ?
                "from a content script:" + sender.tab.url :
                "from the extension");
    if (request.greeting == "hello")
      sendResponse({farewell: "goodbye"});
  });

我确实在manifest.json中声明了权限标签和activeTab。我还错过了什么?

1 个答案:

答案 0 :(得分:1)

如果response未定义(并且"无法读取属性...未定义" 意味着),则发送错误消息。

在这种情况下,Chrome会使用response == undefined调用回调并设置chrome.runtime.lastError

您需要检查错误值:

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
  chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
    if(chrome.runtime.lastError) {
      console.error(chrome.runtime.lastError.message);
      return;
    }
    console.log(response.farewell);
    console.log('ytr');
  });
});

我的赌注是 - 你的内容脚本不知何故没有正确注入。有关指示,请参阅this answer