バックグラウンドスクリプトを使用した拡張機能があります。
"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
}
助けてくれてありがとう ;)