2012-01-09 17 views
5

Tengo un problema. A través del envío de mensajes transferí los datos de DOM de la secuencia de comandos de contenido a la página de fondo. Lo que me gustaría saber es cómo puede establecer un canal de comunicación entre la página Opciones y la página de fondo. La API chrome.extension.getBackgroundPage() no es útil. Tampoco está funcionando el mensaje tradicional que pasa por sendRequest y addlistener. ¿Cómo transfiero estos datos desde la página de fondo a la página de opciones? ¿Podría alguien proporcionar un fragmento probado para explicar?cómo comunicarse entre una página de opciones y una página de fondo de la extensión de cromo


esto es lo que he estado intentando. En mis 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 la selected_Text en background.html como esto

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

Ahora para acceder al valor de este texto a la página de opciones options.html he intentado 2 métodos una era la de utilizar chrome.extension.getBackgroundPage() así:

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

init es onload de options.html .Esta no me da la v Alue. de hecho, acaba en la inicialización de chrome.extension.backgroundPage.

Otro enfoque que probé fue crear una solicitud similar (como la que ya está presente en contentscript.js) de contentscript.js con un saludo diferente y agregarle un oyente en options.html. Eso tampoco parece funcionar en el lado del receptor (página de opciones) porque recibo la devolución de llamada en el índice de contenido después de la solicitud. Seguramente estoy haciendo algo mal, ¿o sí? Por favor ayuda.

+3

"La API chrome.extension.getBackgroundPage() no es útil" ¿Por qué? –

Respuesta

4

Tiene sentido que el segundo enfoque no funcione. Options.html no está "vivo" todo el tiempo, solo cuando la página de opciones está activa. Por lo tanto, no puede escuchar las solicitudes del script de contenido. Para eso sirve exactamente el "fondo".

En cuanto al primer enfoque (usando getBackgroundPage()), nunca usé este método yo mismo, pero parece recuperar solo el DOM de la página de fondo, y por lo tanto no puede acceder a las variables en el fondo js.

Su mejor tiro debe ser la de enviar una solicitud de la página de opciones de la página de fondo, preguntando por este valor, por ejemplo:

escritura de contenido: página

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

Antecedentes:

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

Otra solución más fácil pero más complicada es usar localStorage para pasar información entre las opciones y las páginas de fondo, ya que ambas comparten el mismo.

+2

Gracias ronme, eso fue útil. Finalmente utilicé localStorage para resolver el problema. eso fue bastante starightforward y corto. – user964001

+2

genial para escuchar eso, user964001. Es posible que desee "aceptar" mi respuesta, para que las personas que lean esto más adelante sepan que esta es la respuesta "correcta". – ronme

+0

'getBackgroundPage' trae todas las propiedades de la página de fondo, incluidas todas las variables de' ventana'. – fiatjaf

Cuestiones relacionadas