Javascript 将消息从弹出窗口发送到内容脚本?
假设我想在点击google chrome扩展中弹出页面中的按钮时运行内容脚本 我尝试了以下方法:Javascript 将消息从弹出窗口发送到内容脚本?,javascript,events,google-chrome,google-chrome-extension,message,Javascript,Events,Google Chrome,Google Chrome Extension,Message,假设我想在点击google chrome扩展中弹出页面中的按钮时运行内容脚本 我尝试了以下方法: //popup.js document.addEventListener('DOMContentLoaded', function () { document.querySelector('button').addEventListener('click', clicked); main(); }); function clicked(){ chrome.tabs.getCurre
//popup.js
document.addEventListener('DOMContentLoaded', function () {
document.querySelector('button').addEventListener('click', clicked);
main();
});
function clicked(){
chrome.tabs.getCurrent(
function(tab){
console.log(tab);
chrome.tabs.sendMessage(tab.id, "doSomething");
}
);
}
在内容脚本中:
chrome.extension.onMessage.addListener(
function(message, sender, sendResponse){
console.log("hello world");
}
);
问题是从
chrome.tabs.getCurrent()
回调中的tab
未定义。您是否已为manifest.json中的选项卡授予权限,如下所示
"permissions": [
"tabs"
],
此外,以下代码返回的tab.id是弹出视图(不是内容脚本tab.id)
若要将消息发送到正在浏览的选项卡,请使用以下代码的tab.id,它会给出正确的结果
chrome.tabs.query({"status":"complete","windowId":chrome.windows.WINDOW_ID_CURRENT,"active":true}, function(tabs){
console.log(JSON.stringify(tabs[0]));
console.log(tabs[0].id);
});
如果您需要更多信息,请告诉我。Sudarshan提供的答案是有效的,效果很好,但我刚刚找到了解决问题的另一种方法。我只是想把它放在这里:
function clicked() {
chrome.tabs.executeScript(null,
{code:"console.log('hello world');"});
}
它将插入并执行脚本。tabs.query返回一个数组。应该提到状态是可选的
“windowId”:chrome.windows.WINDOW\u ID\u CURRENT
可以替换为“currentWindow:true
看起来有点整洁。也许还有一个指向tabs.getCurrent的链接,这样他们就可以重新阅读文档了,很多人都弄错了……我确实做过很多次;)
function clicked() {
chrome.tabs.executeScript(null,
{code:"console.log('hello world');"});
}