javascript - extension - Código de extensión de Chrome vs Guiones de contenido vs Guiones de inyección
css chrome extension (1)
El código JavaScript en las extensiones de Chrome se puede dividir en los siguientes grupos:
Código de extensión: acceso completo a todas las API
chrome.*
Permitidas.
Esto incluye la página de fondo y todas las páginas que tienen acceso directo a través dechrome.extension.getBackgroundPage()
, como las ventanas emergentes del navegador .Scripts de contenido (a través del archivo de manifiesto o
chrome.tabs.executeScript
) - Acceso Partial a algunas de las API dechrome
, acceso completo al DOM de la página ( no a ninguno de los objetos de lawindow
, incluidos los marcos).
Los scripts de contenido se ejecutan en un ámbito entre la extensión y la página. El objeto dewindow
global de una secuencia de comandos de Contenido es distinto del espacio de nombres global de la página / extensión.Scripts inyectados (a través de este método en un script de Contenido) - Acceso completo a todas las propiedades en la página. Sin acceso a ninguna de las API
chrome.*
.
Las secuencias de comandos inyectadas se comportan como si la página las incluyera y no están conectadas a la extensión de ninguna manera. Consulte esta publicación para obtener más información sobre los diversos métodos de inyección.
Para enviar un mensaje desde el script inyectado al script de contenido, los eventos deben ser utilizados. Vea esta respuesta para un ejemplo. Nota: Los mensajes transportados dentro de una extensión de un contexto a otro son automáticamente (JSON) -serializados y analizados .
En su caso, el código en la página de fondo ( chrome.tabs.onUpdated
) probablemente se chrome.tabs.onUpdated
antes de que se evalúe el script de contenido script.js
. Entonces, obtendrás un ReferenceError
, porque init
no lo es.
Además, cuando utiliza chrome.tabs.onUpdated
, asegúrese de probar si la página está completamente cargada, porque el evento se dispara dos veces: antes de la carga y al finalizar:
//background.html
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.status == ''complete'') {
// Execute some script when the page is fully (DOM) ready
chrome.tabs.executeScript(null, {code:"init();"});
}
});
Estoy intentando que mi extensión de Chrome ejecute la función init()
cada vez que se carga una página nueva, pero tengo problemas para tratar de entender cómo hacerlo. Por lo que entiendo, necesito hacer lo siguiente en background.html:
- Utilice
chrome.tabs.onUpdated.addListener()
para comprobar cuándo se cambia la página - Use
chrome.tabs.executeScript
para ejecutar un script.
Este es el código que tengo:
//background.html
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
chrome.tabs.executeScript(null, {code:"init();"});
});
//script.js
function init() {
alert("It works!");
}
También me pregunto si la función init () tendrá acceso a mis otras funciones ubicadas en otros archivos JS.