2012-08-01 14 views
15

Soy nuevo en las extensiones de Chrome. Estoy tratando de comunicarme entre el script de contenido y la página background.html. El background.html envía una solicitud, "hello", al script de contenido y el script de contenido debe responder con la alerta "hello background". Pero simplemente no está sucediendo. Mi background.html código es:Extensión de Chrome: comunicación entre script de contenido y background.html

function testRequest() {   
    chrome.tabs.getSelected(null, function(tab) { 
     chrome.tabs.sendRequest(tab.id, {greeting: "hello"}); 
    });  
} 

content.js código:

chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) { 
     if (request.greeting == "hello") 
     alert("hello background"); 
    } 
); 

popup.html código:

<!doctype html> 
<html> 
    <head></head> 
    <body> 
     <form> 
      <input type="button" value="sendMessage" onclick="testRequest()" /> 
     </form>  
    </body> 
</html> 

manifest.json:

{ 
    "browser_action": { 
     "default_icon": "icon.png", 
     "popup": "popup.html" 
    }, 
    "background": { 
     "page": "background.html" 
    }, 
    "permissions": [ 
     "tabs", 
     "http://*/*", 
     "https://*/*", 
     "notifications", 
     "contextMenus" 
    ], 
    "content_scripts": [ 
     { 
      "matches": ["http://*/*","https://*/*"], 
      "js": ["content.js"] 
     } 
    ], 
    "name": "FirstExtension", 
    "version": "1.0" 
} 

¡Por favor ayuda!

Respuesta

22

sendRequest/onRequest se sustituye con sendMessage/onMessage en Chrome 20. *Message no es sólo un alias para *Request, es una API diferente.

Si desea admitir Chrome < 20 (muchos usuarios de Ubuntu todavía están en Chromium 18, porque el PPA no está actualizado), use onRequest y sendRequest. De lo contrario, use los métodos *Message.


Otro problema es que su función se encuentra en la página de fondo, y la llamada se realiza en la ventana emergente. Estos son diferentes ámbitos, si desea llamar a un método de página de fondo en el menú emergente, utilice chrome.extension.getBackgroundPage():

chrome.extension.getBackgroundPage().testRequest(); 

Nota final: Usted está utilizando la versión 1 del manifiesto y controladores de eventos en línea. Esta práctica está en desuso, para obtener más información, consulte http://code.google.com/chrome/extensions/manifestVersion.html.

+0

muchas gracias Rob! :) – Chandeep

+0

@ user975234 Tge [documentación sobre 'onMessage'] (http://code.google.com/chrome/extensions/extension.html#event-onMessage) no coincide con la situación real, por cierto. Para obtener más información, consulte http://stackoverflow.com/a/11811936. –

Cuestiones relacionadas