4

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

問題はtab、コールバック from のchrome.tabs.getCurrent( )が定義されていないことです。

4

2 に答える 2

5

ここに示すように、manifest.json のタブにアクセス許可を与えましたか。

 "permissions": [
    "tabs"
  ],

さらに、次のコードが返す tab.id はポップアップ ビューです(NOT A CONTENT SCRIPT TAB.ID)。

chrome.tabs.getCurrent(
        function(tab){
            console.log(tab);
            chrome.tabs.sendMessage(tab.id, "doSomething");     
        }
    ); 

閲覧しているタブにメッセージを送信する場合は、次のコードの 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); 
});

さらに情報が必要な場合はお知らせください

于 2012-11-30T14:43:46.983 に答える
1

@Sudarshan が提供する回答は有効であり、正常に動作しますが、私の問題に対する別の解決策を見つけました。ここに置くと思った:

function clicked() {
    chrome.tabs.executeScript(null,
      {code:"console.log('hello world');"});
}

スクリプトを挿入して実行します。

于 2012-11-30T19:10:04.573 に答える