Estoy escribiendo una extensión de Chrome. Y quiero usar jQuery
en mi extensión. No estoy usando ninguna página de fondo , solo un script de fondo .
Aquí están mis archivos:
manifest.json
{
"manifest_version": 2,
"name": "Extension name",
"description": "This extension does something,",
"version": "0.1",
"permissions": [
"activeTab"
],
"browser_action": {
"default_icon": "images/icon_128.png"
},
"background": {
"scripts": ["background.js"],
"persistent": false
},
"icons": {
"16": "images/icon_16.png",
"48": "images/icon_48.png",
"128": "images/icon_128.png"
}
}
Mi background.js
archivo solo ejecuta otro archivo llamadowork.js
// Respond to the click on extension Icon
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.executeScript({
file: 'work.js'
});
});
La lógica principal de mi extensión está dentro work.js
. El contenido del cual no creo importa aquí para esta pregunta.
Lo que quiero preguntar es cómo puedo usar jQuery en mi extensión. Como no estoy usando ninguna página de fondo. No puedo simplemente agregarle jQuery. Entonces, ¿cómo puedo agregar y usar jQuery en mi extensión?
Intenté ejecutar jQuery junto con mi work.js desde el background.js
archivo.
// Respond to the click on extension Icon
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.executeScript({
file: 'thirdParty/jquery-2.0.3.js'
});
chrome.tabs.executeScript({
file: 'work.js'
});
});
Y funciona bien, pero me preocupa si los scripts agregados para ejecutarse de esta manera se ejecutan de forma asincrónica. En caso afirmativo, puede suceder que work.js se ejecute incluso antes jQuery (u otras bibliotecas que pueda agregar en el futuro).
Y también me gustaría saber cuál es la forma correcta y mejor de usar bibliotecas de terceros, en mi extensión de Chrome.
Respuestas:
Debe agregar su script jquery a su proyecto de extensión de Chrome y a la
background
sección de su manifest.json de esta manera:Si necesita jquery en un content_scripts, también debe agregarlo en el manifiesto:
Esto es lo que hice.
Además, si recuerdo correctamente, los scripts de fondo se ejecutan en una ventana de fondo que puede abrir a través de
chrome://extensions
.fuente
You have to add your jquery script to your chrome-extension project
? Hice esto: manifest.json:"background": {
`" scripts ": [" thirdParty / jquery-2.0.3.js "," background.js "],` `" persistent ": false``}, `y descargué el jQuery a la carpeta de la tercera parte. Sin embargo, todavía no puedo usar jQuery. Da el error:Uncaught ReferenceError: $ is not defined
agregué esto a miwork.js
archivo para probarlo.$("body").html("Foo!");
work.js
archivo.Uncaught ReferenceError: $ is not defined
. Si puede, ¿puede cargar un ejemplo de trabajo en alguna parte? Solo un ejemplo simple como hacer '$ ("body"). Html ("Foo!");' en work.js.jQuery
o$
ser reconocido. Resultó que estaba haciendo referencia a jQuery por última vez en la matriz de manifiesto. Cuando lo puse primero fue reconocido.Es muy fácil, solo haz lo siguiente:
agregue la siguiente línea en su manifest.json
Ahora puede cargar jQuery directamente desde url
Fuente: google doc
fuente
subresource integrity
(SRI).Eso no debería ser realmente una preocupación: puede poner en cola los scripts para que se ejecuten en un determinado contexto JS, y ese contexto no puede tener una condición de carrera ya que es de un solo subproceso.
Sin embargo, la forma correcta de eliminar esta preocupación es encadenar las llamadas:
O, generalizado:
O, prometido (y traído más en línea con la firma adecuada):
O, por qué no,
async
/await
-ed para una sintaxis aún más clara:Tenga en cuenta que en Firefox puede usarlo
browser.tabs.executeScript
ya que devolverá una Promesa.fuente
Además de las soluciones ya mencionadas, también puede descargar
jquery.min.js
localmente y luego usarlo:Para descargar -
manifest.json -
en html -
Referencia: https://developer.chrome.com/extensions/contentSecurityPolicy
fuente
En mi caso, obtuve una solución de trabajo a través de la mensajería entre documentos (XDM) y la ejecución de la extensión de Chrome al hacer clic en lugar de cargar la página.
manifest.json
background.js
myscript.js
fuente