如何触发后台脚本到网页脚本的功能?

时间:2020-02-29 20:18:07

标签: javascript google-chrome

我当前正在编写chrome扩展程序。我现在想在从网页加载的脚本中调用函数。

我已经尝试过从background.js向我的网页发送一条简单的消息。

chrome.runtime.sendMessage({ test: 'hello' }, function (response) {
    console.log(response);
});

抛出错误:“未经检查的runtime.lastError:无法建立连接。接收端不存在。”

在我的网页脚本上:

chrome.runtime.onMessageExternal.addListener(function (callback) {
    console.log(callback);
});

抛出错误:“ TypeError:无法读取未定义的属性'addListener'”

如何将我的background.js中的消息发送到someWebPageScript.js?

谢谢。

1 个答案:

答案 0 :(得分:0)

第一个问题:“ someWebPageScript.js”是您的“ content.js”脚本,还是清单中声明的​​内容(可能对您有所帮助)?

如果是这样,并且您试图将消息从后台脚本传递到内容脚本,则可能需要仔细阅读Chrome消息传递文档here。将消息传递到内容脚本看起来更像:

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

接收端(在内容脚本中)需要看起来像这样:

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"});
});

您正在使用的chrome.runtime.onMessageExternal.addListener侦听器用于接收来自其他扩展名的消息。

希望这会有所帮助。 -布伦特