J'écris une extension chrome. Et je veux utiliser jQuery
dans mon extension. Je n'utilise aucune page de fond , juste un script de fond .
Voici mes fichiers:
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"
}
}
Mon background.js
fichier exécute juste un autre fichier nomméwork.js
// Respond to the click on extension Icon
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.executeScript({
file: 'work.js'
});
});
La logique principale de mon extension est à l'intérieur work.js
. Le contenu dont je ne pense pas qu'il importe ici pour cette question.
Ce que je veux demander, c'est comment puis-je utiliser jQuery dans mon extension. Puisque je n'utilise aucune page de fond. Je ne peux pas simplement y ajouter jQuery. Alors, comment puis-je ajouter et utiliser jQuery dans mon extension?
J'ai essayé d'exécuter jQuery avec mon work.js à partir d'un background.js
fichier.
// 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'
});
});
Et cela fonctionne bien, mais j'ai le souci de savoir si les scripts ajoutés pour être exécutés de cette manière sont exécutés de manière asynchrone. Si oui, il peut arriver que work.js s'exécute avant même jQuery (ou d'autres bibliothèques que je pourrais ajouter à l'avenir).
Et j'aimerais également savoir quelle est la manière correcte et la meilleure d'utiliser des bibliothèques tierces, dans mon extension chrome.
Réponses:
Vous devez ajouter votre script jquery à votre projet d'extension chrome et à la
background
section de votre manifest.json comme ceci:Si vous avez besoin de jquery dans un content_scripts, vous devez également l'ajouter dans le manifeste:
C'est ce que j'ai fait.
De plus, si je me souviens bien, les scripts d'arrière-plan sont exécutés dans une fenêtre d'arrière-plan que vous pouvez ouvrir via
chrome://extensions
.la source
You have to add your jquery script to your chrome-extension project
? J'ai fait ceci: manifest.json:"background": {
`" scripts ": [" thirdParty / jquery-2.0.3.js "," background.js "],` `" persistent ": false``}, `et j'ai téléchargé le jQuery dans le dossier ThirdParty. Cependant, je ne peux toujours pas utiliser jQuery. Cela donne l'erreur:Uncaught ReferenceError: $ is not defined
j'ai ajouté ceci à monwork.js
fichier pour le test.$("body").html("Foo!");
work.js
fichier.Uncaught ReferenceError: $ is not defined
. Si vous le pouvez, pouvez-vous s'il vous plaît télécharger un exemple de travail quelque part. Juste un exemple simple comme faire '$ ("body"). Html ("Foo!");' dans work.js.jQuery
ou$
reconnu. Il s'est avéré que je faisais référence à jQuery en dernier dans le tableau du manifeste. Quand je l'ai mis en premier, il a été reconnu.C'est très simple de faire ce qui suit:
ajoutez la ligne suivante dans votre manifest.json
Vous êtes maintenant libre de charger jQuery directement à partir de l'URL
Source: doc google
la source
subresource integrity
(SRI).Cela ne devrait pas vraiment être un problème: vous mettez en file d'attente des scripts à exécuter dans un certain contexte JS, et ce contexte ne peut pas avoir de condition de concurrence car il est mono-thread.
Cependant, la bonne façon d'éliminer ce problème est d'enchaîner les appels:
Ou, généralisé:
Ou, promis (et mis plus en ligne avec la signature appropriée):
Ou, pourquoi diable pas,
async
/await
-ed pour une syntaxe encore plus claire:Notez que dans Firefox, vous pouvez simplement l'utiliser
browser.tabs.executeScript
car il renverra une promesse.la source
Outre les solutions déjà mentionnées, vous pouvez également télécharger
jquery.min.js
localement puis l'utiliser -Pour le téléchargement -
manifest.json -
en html -
Référence - https://developer.chrome.com/extensions/contentSecurityPolicy
la source
Dans mon cas, j'ai obtenu une solution de travail via la messagerie croisée (XDM) et l'exécution de l'extension Chrome en cliquant au lieu du chargement de la page.
manifest.json
background.js
myscript.js
la source