Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将消息从弹出窗口发送到内容脚本?_Javascript_Events_Google Chrome_Google Chrome Extension_Message - Fatal编程技术网

Javascript 将消息从弹出窗口发送到内容脚本?

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

假设我想在点击google chrome扩展中弹出页面中的按钮时运行内容脚本

我尝试了以下方法:

//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');"});
}