2016-11-16 97 views
0

我正在使用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,但我只是需要將消息發送到活動選項卡。我試着爲tabId添加null,但它仍然給我一個錯誤。

我該如何解決這個問題?

回答

1

即使它是一個活動選項卡,您也必須通過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屬性可以被訪問。