gpt4 book ai didi

google-chrome-extension - chrome.extension.onMessage.addListener 无法读取未定义的属性 'onMessage'

转载 作者:行者123 更新时间:2023-12-04 13:41:39 31 4
gpt4 key购买 nike

background.html :

chrome.tabs.query({active:true, currentWindow:true},function(tabs){
chrome.tabs.sendMessage(tabs[0].id,"target.js");
});

content.js :
chrome.extension.onMessage.addListener(function(msg,sender,sendResponse){
if (msg == "target.js"){
extensionID = sender.id;
}
});

但是,它不起作用;
Uncaught TypeError: Cannot read property 'onMessage' of undefined 

如何使它正确?

最佳答案

您说“content.js 是一个内容脚本,它被另一个内容脚本注入(inject)到当前选项卡中。”。
这就是你的问题。注入(inject)的脚本在页面上下文中执行(就好像它们是由页面本身创建的一样),因此它们无法访问任何 Chrome 扩展 API。
您可以使用自定义事件或 postMessage在页面和您的内容脚本之间进行通信,该脚本又与后台页面进行通信。
例如,请参阅这个基本示例:

    // Injected script script
addEventListener('message', function(event) {
if (event.data && event.data.extensionMessage) {
alert(event.data.extensionMessage);
}
});
// Content script which injects the script:
chrome.extension.onMessage.addListener(function(message) {
postMessage({extensionMessage: message}, '*');
});
我认为您想使用 content.js作为一个真正的内容脚本,而不是一个注入(inject)的脚本。如果您想了解注入(inject)脚本和内容脚本之间的区别,请参阅 Chrome extension code vs Content scripts vs Injected scripts .

关于google-chrome-extension - chrome.extension.onMessage.addListener 无法读取未定义的属性 'onMessage',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12936953/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com