2012-01-09 13 views
5

Mam problem. Poprzez przekazywanie wiadomości przeniosłem dane DOM z skryptu treści na stronę w tle. Chciałbym wiedzieć, w jaki sposób można ustanowić kanał komunikacji między stroną Opcje a stroną w tle. Interfejs API chrome.extension.getBackgroundPage() nie jest przydatny. Nie działa również tradycyjny komunikat przechodzący przez sendRequest i addlistener. Jak przenieść te dane ze strony w tle na stronę opcji? Czy ktoś może udostępnić przetestowany fragment, aby to wyjaśnić?jak komunikować się między stroną opcji a stroną w tle rozszerzenia chrome


to jest to, czego próbowałem. W moich 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> 

I retreive się selected_Text na background.html jak ten

<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> 

teraz, aby uzyskać dostęp do wartości tego tekstu na stronie opcji options.html Próbowałem 2 sposoby jednym z nich było korzystać chrome.extension.getBackgroundPage() tak:

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

init jest onload options.html .To nie daje mi v Alue. infact po prostu kończy się przy inicjalizacji chrome.extension.backgroundPage.

Innym podejściem, które próbowałem, było stworzenie podobnego żądania (podobnego do tego już istniejącego w contentscript.js) z pliku contentscript.js z innym powitaniem i dodanie do niego obiektu nasłuchującego w options.html. To nie działa ani po stronie odbiorcy (strona opcji), ponieważ otrzymuję wywołanie zwrotne w spisie treści po żądaniu. Z pewnością robię coś nie tak, czy nie? Proszę o pomoc.

+3

"Funkcja API chrome.extension.getBackgroundPage() nie jest przydatna" Dlaczego? –

Odpowiedz

4

Sensowne jest, że drugie podejście nie działa. Option.html nie jest "żywy" przez cały czas, tylko gdy strona z opcjami działa. Dlatego nie może słuchać żądań ze skryptu treści. Po to właśnie jest "tło".

Jeśli chodzi o pierwsze podejście (używając getBackgroundPage()), nigdy sam nie użyłem tej metody, ale wydaje się, że przywraca tylko DOM strony tła, a zatem nie można uzyskać dostępu do zmiennych w tle js.

Twój najlepszy strzał powinien wysłać wniosek od strony opcji na stronie tło, prosząc o tej wartości, np:

skrypt Treść: strona

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

Tło:

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

Innym, prostszym, ale trudniejszym rozwiązaniem jest użycie localStorage do przekazywania informacji między opcjami i stronami w tle, ponieważ oba mają ten sam.

+2

Dzięki ronme, to było przydatne. W końcu użyłem localStorage, aby rozwiązać problem. to było dość krótkowzroczne. – user964001

+2

świetnie to słyszeć, user964001. Być może zechcesz "zaakceptować" moją odpowiedź, więc ludzie, którzy przeczytają to później, wiedzą, że jest to "właściwa" odpowiedź. – ronme

+0

'getBackgroundPage' przynosi wszystkie właściwości strony tła, w tym wszystkie zmienne' window'. – fiatjaf

Powiązane problemy