use*_*524 5 google-chrome-extension
在background.html
:
chrome.tabs.query({active:true, currentWindow:true},function(tabs){
chrome.tabs.sendMessage(tabs[0].id,"target.js");
});
Run Code Online (Sandbox Code Playgroud)
在content.js
:
chrome.extension.onMessage.addListener(function(msg,sender,sendResponse){
if (msg == "target.js"){
extensionID = sender.id;
}
});
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用;
Uncaught TypeError: Cannot read property 'onMessage' of undefined
Run Code Online (Sandbox Code Playgroud)
怎么做对了?
Rob*_*b W 11
你说"content.js是一个内容脚本,它被另一个内容脚本注入当前标签."
这就是你的问题所在.注入的脚本在页面的上下文中执行(就好像它们是由页面本身创建的),因此他们无法访问任何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}, '*');
});
Run Code Online (Sandbox Code Playgroud)
我认为你想要content.js
用作真正的内容脚本,而不是注入脚本.如果您想了解注入的脚本和内容脚本之间的差异,请参阅Chrome扩展代码与内容脚本与注入脚本.
归档时间: |
|
查看次数: |
14805 次 |
最近记录: |