4

バックグラウンドスクリプトを使用した拡張機能があります。

"background": {
    "scripts": ["scripts/background.js"]
  },

およびコンテンツスクリプト:

"content_scripts": [
    {
      "matches": ["*://*/*"],
      "js": ["scripts/content_script.js"]
    }
  ],

ポップアップウィンドウ(popup.html)、およびポップアップスクリプト(popup.js)。popup.jsはマニフェストに登録されておらず、popup.htmlの外観を処理し、ボタンのクリックなど、popup.htmlで行われたユーザーアクションをリッスンします。

現在のタブのページにメールを送信する拡張機能を作成したいのですが、そのためには、ページDOMを取得し、content_scriptデータ(DOM)をに渡す必要がありますbackground script。この後、ユーザーがpopup.htmlでイベントをトリガーすると、popup.jsがこのイベントをキャッチし、popup.jsがbackground.jsから渡されたデータ(DOM)を取得できるようにします。どうすればこれを作ることができますか?だから、私の質問は、background.jsとpopup.jsの間でどのように通信できますか?


私は自分の質問に対する答えを見つけました:

エルビスに感謝します、私は問題を解決したと思います。コンテンツスクリプトでサイトのDOMを取得するだけで済みますが、私の質問の解決策は次のとおりです。

content_script.js

 // SEND DOM structure to the background page
    chrome.extension.sendRequest({dom: "page DOM here"});

background.html

<html>
<head>
<script>
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.dom != "")
        var theDOM = request.dom;
        console.log(request.dom); // page DOM here -> works
        chrome.extension.sendRequest({theDOM: theDOM}); // theDOM : "page DOM here"
});
</script>
</head>
<body>
</body>
</html>

popup.js

var dom;
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.theDOM != ""){
        console.log("popup request: "+request.theDOM);
        dom = request.theDOM;
    }
});

// HANDLE TAB_1 REQUESTS (EMAIL PAGE)
// ---------------------------------
$("#send").click(function(){
    console.log(dom); // page DOM here
}

助けてくれてありがとう ;)

4

1 に答える 1

4

メッセージパッシングを行うことができます。ドキュメントから:

コンテンツスクリプトでこれを使用します。

chrome.extension.sendRequest({greeting: "hello"}, function(response) {
  console.log(response.farewell);
});

バックグラウンドに送信{greeting: "hello"}します。指定されたコールバックに注意してください

バックグラウンドページは、以下を使用してこれらの要求をリッスンできます。

chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {
    if (request.greeting == "hello")
      sendResponse({farewell: "goodbye"});
  });

関数への引数sendResponseはコールバックに渡されます

于 2012-05-01T09:54:05.230 に答える