在 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/