RequireJS dans une extension Chrome
Je fais construire une extension Chrome qui ajoute un peu de JavaScript pour les articles de Wikipédia. Autant que je sache, la seule façon d'utiliser RequireJS est d'ajouter la ligne
<script data-main="scripts/bla" src="scripts/require-jquery.js>
Cependant, dans mon extension Chrome, je n'ai pas accès au code HTML à ajouter cette ligne. Des suggestions?
source d'informationauteur Randomblue
Vous devez vous connecter pour publier un commentaire.
Que vous avez accès au DOM de la page de l'Extension Chrome via un le contenu du scriptmais le contenu du script n'auront accès qu'à le JavaScript les objets créés par la le contenu du script lui-même.
Il existe de nombreuses façons d'inclure des scripts à partir d'une extension Chrome, comment vous incluez il sera basé sur ce que vous comptez faire avec elle.
Si vous le souhaitez dans le menu contextuel de la page d'un navigateur ou action de la page vous pouvez inclure du manifeste en tant que contenu de script ou de référence à l'aide d'une balise script dans le popup.html à partir d'une relative des ressources dans votre plugin.
De manifeste:
De popup.html:
Si vous le souhaitez dans la page d'arrière-plan vous pouvez référencer à partir de la page d'arrière-plan à l'aide d'une balise de script à partir d'une relative des ressources dans votre plugin.
De background.html
Si vous voulez qu'il soit inclus dans la page du navigateur lui-même alors vous devez utiliser la dynamique d'injection de script sur la page du DOM. Vous avez accès à la page du DOM à partir d'un le contenu du script. Veuillez noter que si vous chargez le JavaScript à l'aide de cette technique, vous plugin JavaScript (à partir d'un arrière-plan de la page, le contenu du script ou popup script) n'auront pas accès à elle.
Vous pouvez soit charger le requirejs de votre extension à l'aide de la
chrome.extension.getURL
de la méthode ou de la hébergé emplacement sur l'internet.ici est de savoir comment, Vous pouvez le faire dans la page d'arrière-plan.
Dans le fichier manifeste :
Dans main.js:
Au lieu de cela:
Vous sera Utiliser ceci:
Voir cette question: à l'Aide de Require.js en l'absence de données principale
Vous pouvez aussi le faire dans la page de contenu à l'aide de cette idée.
Belle Question par la voie. J'ai aimé Adam Ayres de l' réponses.
MODIFIER ci-dessous est encore vrai pour la plaine de vanille require.js mais trouvé une solution de contournement par bifurquer RequireJS
Github: https://github.com/jeroendelau/requirejs
Bower: bower install requirejs-par-navigateur-extensions
ORIGINAL POST
L'injecter dans le contenu du script est de loin le plus difficile. Et les réponses ci-dessus sont incomplètes ou incorrectes.
Arrière-plan et le menu Contextuel:
Aller avec auparavant répondre par @nafis, ils vont travailler
Contenu Du Script
C'est un très rusé, et cette partie de la description de l'api est la clé:
Intuitivement, cela devrait être correct
le manifeste.json
myscript.js
CELA NE FONCTIONNERA PAS
Le problème est que requirejs va procéder à la charge de tous vos dépendances, en injectant des
<script>
balises dans l'en-tête. Ces balises de script sont exécutées dans la PAGE d'environnement, et non pas dans la PROLONGATION de l'environnement. Et c'est important.environnement
va travailler. de stockage, messagerie, cross-site request sont pas tous
disponible
Donc, pour ceux à travailler, les modules chargés par requirejs besoin d'être injecté dans les extensions de l'environnement. Il est possible d'utiliser un requirejs plugin pour modifier le comportement de chargement.
Raison de la façon dont cela fonctionne, la solution est très inélégant, ET il empêche de voir les scripts dans le débogueur en vertu de scripts. Mais si vous êtes désespéré, ça fonctionne.
myscript.js
De l'utiliser dans un contenu du script vous pouvez simplement l'inclure dans le manifeste.json comme votre première dépendance:
Il PAS de polluer l'espace de noms global (de la fenêtre) donc pas de soucis à ce sujet; son uniquement disponible pour les scripts d'extension.
Également dans le manifeste.json que vous avez à nommer les fichiers que requirejs sera en mesure d'utiliser en les nommant "web_accessible_resources", pour rendre cet facile de les mettre tous dans un dossier (ex: js/) de sorte que vous pouvez utiliser un caractère générique:
Et puis dans votre script (par exemple, myscript.js) pour utiliser requirejs il suffit de demander pour les dépendances à l'aide de
chrome.extension.getURL
comme ceci: