2016-11-16 5 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, но я просто необходимо отправить сообщение на активную вкладку. Я попытался добавить null для tabId, но он все еще дает мне ошибку.

Как это исправить?

ответ

1

Несмотря на то, что активная вкладка, вы должны будете пройти tabId. chrome.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 атрибут может быть доступна.