2012-01-09 16 views
5

私は問題に直面しています。メッセージを渡すことで、コンテンツスクリプトからバックグラウンドページにDOMデータを転送しました。私が知りたいのは、オプションページとバックグラウンドページの間にコミュニケーションチャネルを確立する方法です。 API chrome.extension.getBackgroundPage()は役に立ちません。また、伝統的なメッセージはsendRequestaddlistenerを通ることもありません。このデータをバックグラウンドページからオプションページにどのように転送するのですか?誰かが説明するテスト済みのスニペットを提供できますか?オプションページとクロム拡張の背景ページの通信方法


これは私が試したことです。私contentscript.jsで

<script> 
    var selected_Text =""; 
    window.addEventListener("dblclick",function(event){ 

    selected_Text = String(window.getSelection()); 
    chrome.extension.sendRequest({greeting: "maprender",name:selected_Text},  function(response) { 
     alert("reached here") 
     console.log(response.farewell); 
     }); 

//i am to then load options.html on DOM like this 
var Div = document.createElement("iframe"); 
Div.setAttribute('src', chrome.extension.getURL('options.html')); 
Div.setAttribute("style","width:130px;height:80px;position:absolute;left:10px;"); 
Div.setAttribute("id","xyz"); 
document.body.appendChild(Div); 
</script> 

私は2つの方法を試してみましたオプションのページoptions.htmlでこのテキストの値にアクセスするために今、この

<script> 
var Addr_details={ 
place:null 
}; 
chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) { 

    if (request.greeting == "maprender") 
    { 
     alert("reached here sendin resp"+request.name); 
     Addr_details.place = request.name; 
     sendResponse({farewell: "goodbye"}); 

    } 
    else 
     sendResponse({}); // snub them. 
    }); 
</script> 

ようbackground.htmlでselected_Textを盗ん

<script> 
function init(){ 
var bkg = chrome.extension.getBackgroundPage(); 
alert("the selected text is "+bkg.Addr_details.place); 
} 
</script> 

initがoptions.html .Thisのonloadイベントである私にVを与えるものではありません:一つは、このようchrome.extension.getBackgroundPage()を使用することでしたアウエー。実際はchrome.extension.backgroundPageの初期化時に終了します。

私が試みたもう1つのアプローチは、異なる挨拶でcontentscript.jsから既にcontentcript.jsにあるものと同様の要求を作成し、options.htmlでリスナーを追加することでした。受信側(オプションページ)では、リクエスト後にcontentscriptでコールバックを取得するので、私は確かに何か間違っている、amnt私は?助けてください。

+3

「API chrome.extension.getBackgroundPage()は役に立ちません」なぜですか? –

答えて

4

2番目のアプローチが機能しないことは意味があります。 Options.htmlは、オプションページが起動している場合に限り、常に「生きている」わけではありません。したがって、コンテンツスクリプトからの要求を聞くことはできません。 これはまさに「背景」のためのものです。

最初のアプローチ(getBackgroundPage()を使用)に関しては、このメソッドを自分で使用したことはありませんでしたが、バックグラウンドページのDOMだけを戻すように見えるため、バックグラウンドjsの変数にアクセスすることはできません。

あなたの最高のショットは、この値を求め、背景ページにオプションページからリクエストを送信するためにする必要があります。例:

コンテンツスクリプト:

chrome.extension.sendRequest({greeting: "retrieveAddr"}, function(response) { 
    // do something with response.addr... 
}); 

背景ページ:

chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) { 
    switch (request.greeting) { 
    case "maprender"): 
     alert("reached here sendin resp"+request.name); 
     Addr_details.place = request.name; 
     sendResponse({farewell: "goodbye"}); 
     break; 
    case "retrieveAddr": 
     sendResponse({addr: Addr_details}); 

    default: 
     sendResponse({}); // snub them. 
    }); 
}); 

もう1つ、簡単ではあるが解決策は、両方とも同じものを共有するので、localStorageを使用してオプションと背景ページの間の情報を渡すことです。

+2

おかげで、便利でした。私はついにこの問題を解決するためにlocalStorageを使用しました。それはかなり早くて短かった。 – user964001

+2

聞いてよかったです、user964001。あなたは私の答えを "受け入れる"ことを望むかもしれないので、これを知っている人がこれを知っている人は "正しい"答えです。 – ronme

+0

'getBackgroundPage'は、すべての' window'変数を含むバックグラウンドページのすべてのプロパティを返します。 – fiatjaf

関連する問題