我正在开发我的第一个 Chrome 扩展程序,一切顺利——您可以在这里看到 https://github.com/rowancavanagh/measure .不过,我在这里写的问题还没有出现在 Github 上。
我的扩展程序的后台脚本当前与您打开扩展程序的任何页面上的注入(inject)内容脚本对话。这很好用。
不过,我现在要做的是为首次使用该扩展制作一个引导页面 (html)。它给出了一些介绍性的句子,然后要求您打开扩展程序。此时,我假设我将使用适用于后台脚本和注入(inject)内容脚本的相同 chrome.tabs.sendMessage
和 chrome.runtime.onMessage
。因为后台脚本似乎向当前事件的选项卡发送了一条消息,并且该选项卡上的任何事件脚本都能够接收到它。考虑到这行不通,我想情况并非如此。
在 background.js 中,当它打开时我收到了以下消息:
chrome.browserAction.onClicked.addListener(function(tab) {
toggle = !toggle;
if(toggle){
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
tabId = tabs[0].id;
chrome.tabs.sendMessage(tabId, {"whatToDo": "on"});
});
}
});
在加载到入职 HTML 页面的脚本中,我有:
function testMeasure() {
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
var whatToDo = message.whatToDo;
if (whatToDo == "on") {
console.log("Measure is on");
dialogTwo.innerHTML = '<p>Now highlight some text</p>';
};
});
};
——
24/2 更新
testMeasure() 被触发,我收到以下错误:
未捕获的类型错误:无法读取未定义的属性“addListener”
——
我也曾尝试以与在扩展中注入(inject)其他内容脚本相同的方式注入(inject)脚本,但这没有帮助。
由于我主要是一名设计师,所以我对这一切的掌握很差。所以请简单的解释一下!
最佳答案
你只需要使用 chrome.runtime.sendMessage
而不是 chrome.tabs.sendMessage
。第二个仅用于与内容脚本通信。
在扩展页面中加载的脚本不是内容脚本,它们与后台页面的脚本具有相同的权限。
关于javascript - Chrome 扩展 - 尝试在后台和第二个内容脚本之间发送消息(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42444937/