google chrome extension - Extensión de Chrome Enviar mensaje desde Background.js a Content Script
google-chrome-extension manifest (3)
Gracias a la información de @Teepeemm, he incluido una terminación de carga de pestañas antes de enviar un mensaje a la secuencia de comandos de contenido.
ESPERE A QUE LA PESTAÑA SEA CARGADA COMPLETAMENTE
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
if (changeInfo.status == ''complete'') {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {action: "SendIt"}, function(response) {});
});
}
});
He leído la documentación sobre cómo hacerlo Enviar el archivo de fondo javascript (main.js) a Content Script (content.js) pero no puedo obtener el onMessage para abrir mi alerta.
Manifest.json
{
"name": "Example",
"version": "1.0.1",
"manifest_version" : 2,
"description": "Example Description",
"background" : {
"scripts" : ["main.js"]
},
"page_action" : {
"default_icon": {
"19": "icons/19.png",
"38": "icons/38.png"
},
"default_title" : "Example Title"
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["lib/jquery-1.8.3.min.js","scripts/content.js"],
"run_at": "document_idle",
"all_frames": false
}],
"permissions": [
"tabs",
"geolocation"
],
"icons": {
"16": "icons/16.png",
"48": "icons/48.png",
"128": "icons/48.png"
}
}
Fondo de archivo javascript (main.js)
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {action: "SendIt"}, function(response) {});
});
Contenido de archivo javascript (content.js)
chrome.extension.onMessage.addListener(function(msg, sender, sendResponse) {
if (msg.action == ''SendIt'') {
alert("Message recieved!");
}
});
Si tiene cada secuencia de comandos anunciando su presencia (prefiero console.log
para alert
), verá que la secuencia de comandos de fondo se ejecuta una vez (en la instalación o el inicio), mientras que la secuencia de comandos de contenido se ejecuta con cada nueva página. Esto significa que querrá que algún evento externo active el mensaje. Algo como
chrome.pageAction.onClicked.addListener(function(tab) {
chrome.tabs.sendMessage(tab.id,{action:"SendIt"});
});
Y no olvide llamar a chrome.pageAction.show(tabId);
según sea apropiado.
chrome.extension.onMessage
: chrome.extension.onMessage
está en desuso, debería usar chrome.runtime.onMessage
, aunque no creo que esto solucione su problema.
Recuerdo que tuve un problema al inyectar un archivo jquery minified usando scripts de contenido. Intente usar una versión no minificada (es decir, jquery-1.8.3.js). Una vez que haya hecho eso, también agregue jquery-1.8.3.js
a web_accessible_resources
en su archivo de manifiesto. (Lea acerca de eso here )
Si todavía no funciona, mi última sugerencia sería agregar "<all_urls>"
a la matriz de permisos en su manifiesto.