将消息发送到活动选项卡

时间:2016-11-16 19:57:15

标签: javascript google-chrome-extension

我正在使用executeScript在当前活动标签中运行。但在其回调函数中,我想向正在执行的脚本发送消息......

chrome.tabs.executeScript(null, {
        file: 'src/js/scripts/extractCSS.js'
     }, function() {
        chrome.tabs.sendMessage(this.props.source);

this.props.source是我想要传递的对象。在src/js/scripts/extractCSS.js里面,我试图抓住这个消息......

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
     console.log(message);
});

但是我收到以下错误......

Error in response to tabs.executeScript: Error: Invocation 
of form tabs.sendMessage(object) doesn't match definition 
tabs.sendMessage(integer tabId, any message, optional object 
options, optional function responseCallback)

根据我的收集,我需要定义tabId,但我只需要将消息发送到活动标签。我尝试为null添加tabId,但它仍然给我一个错误。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

即使是活动标签,您也必须通过tabIdchrome.tabs.query可用于获取标签。您可以通过以下方式执行此操作:

chrome.tabs.query(
    { currentWindow: true, active: true },
    function (tabArray) {
        chrome.tabs.executeScript(tabArray[0].id, {
            file: 'src/js/scripts/extractCSS.js'
         }, function() {
            chrome.tabs.sendMessage(this.props.source);

        })
    }
);

由于当前窗口中只能有一个活动标签,tabArray只有一个元素,然后可以访问id属性。