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の内側に、私は私が集まるところでは... ...メッセージをキャッチする

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) 

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

をしようとしています、私はtabIdを定義する必要がありますが、ちょうど私アクティブなタブにメッセージを送信する必要があります。私はnulltabIdに追加しようとしましたが、それでもエラーが表示されます。

どうすればこの問題を解決できますか?

答えて

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属性にアクセスすることが可能になります:あなたはそれを次のように行うことができます。

関連する問題