2012-05-01 5 views
4

私は、バックグラウンドスクリプトを使用して、拡張子を持っている:background.jsとpopup.jsの間の通信はどうすればできますか?

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

とコンテンツスクリプト:

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

ポップアップウィンドウ(popup.html)、ポップアップスクリプト(popup.js)。 popup.jsはマニフェストに登録されておらず、popup.htmlの外観を扱い、ボタンをクリックするなど、popup.htmlで行われたユーザーの操作を待ち受けます。

私が何電子メール現在のタブのページ、拡張子を作りたい、そしてこのために、私はbackground scriptにデータ(DOM)を通過し、content_scriptでページのDOMを取得する必要があります。この後、ユーザーがpopup.htmlでイベントをトリガーすると、popup.jsがこのイベントをキャッチし、popup.jsが渡されたデータ(DOM)をbackground.jsから取得できるようにします。どうすればこのことができますか?ですから、私の質問は、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> 

ポップアップ.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

あなたはメッセージの受け渡しをすることができます。 documentationから:

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

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関数の引数は、コールバックに渡されます

+0

おかげで、私はすでにドキュメントのこの記事を読んですでに私のコードに挿入されていますが、まだ存在する2つの問題 は、 'backcounts 'と' popup.js'の間ではなく 'contentscript'と' backgroundscript'の間のメッセージだけです。注意:3つのスクリプト、1つのコンテンツ、1つのバックグラウンド、1つのpopup.htmlを表示するためのものがあります。 - コンソールでは警告/テキストが表示されないので、メッセージの解析ができません。 - >リクエストを送信するためにイベントをトリガーする必要がありますか? –

+0

ポップアップでイベントがトリガされると、回答に記載されているのと同じ方法で(つまりchrome.extension.sendRequestを使用して)背景と通信することができ、背景は必要なデータを返すことができます。 –

+0

ああ、background.jsをbackground.htmlに変更すると、メッセージの解析が始まりました。問題が解決しました:) ** Elvis **:試してみてください。 –

関連する問題