Comment accéder à la page des variables à partir de Chrome extension de fond de script
Avec un contenu de script, vous pouvez injecter une balise script dans le DOM pour accéder à des variables dans la page d'origine (comme expliqué dans cette question).
Je veux éviter d'injecter mon code dans chaque page et, au lieu de seulement faire que lorsque l'utilisateur clique sur l'icône de l'extension.
Quand j'ai essayé d'utiliser le même code que pour le contenu du script les valeurs ne sont pas définis, bien que le script a été inséré correctement.
Est-ce possible? Autrement, c'est à l'aide d'un script contenu et de communiquer avec elle la meilleure solution?
Voici le code que j'utilise:
var scr = document.createElement("script");
scr.type="text/javascript";
scr.innerHTML = "setInterval('console.log(window.testVar)', 1000)"
document.body.appendChild(scr)
Manifeste extrait:
"permissions": [
"tabs",
"http://*/*", "https://*/*"
],
"background": {
"scripts": ["inject.js"]
},
Veuillez élargir votre question en montrant votre fichier manifeste et le reste de votre code. Comment savez-vous que "le script a été inséré correctement"?
Avez ajouté l'article pertinent de la manifester. Par "a été inséré correctement", je veux dire que le nœud DOM a été inséré comme je l'espère, et la sortie du journal est imprimé de façon périodique. Le problème est que la valeur de
Veuillez vérifier ma réponse.
Avez ajouté l'article pertinent de la manifester. Par "a été inséré correctement", je veux dire que le nœud DOM a été inséré comme je l'espère, et la sortie du journal est imprimé de façon périodique. Le problème est que la valeur de
window.testVar
est pas défini si je lance inject.js à partir d'un fond de script.Veuillez vérifier ma réponse.
OriginalL'auteur Matt Zeunert | 2013-09-09
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer un nouveau script avec le code suivant:
Votre
inject.js
doit rester dans le cadre de l'extension, mais vous n'avez pas besoin de le mentionner dans le manifeste. De cette façon, il sera exécuté en tant que contenu de script à chaque fois que vous appuyez sur l'extension de l'icône. Vous n'avez pas inclure la partie du manifeste où vous définissez les browserAction, mais vous avez juste besoin de ne pas spécifier undefault_popup
.OriginalL'auteur rsanchez
Nope. Ce n'est pas possible. Vous pouvez injecter un script, mais elle n'ont qu'un accès à DOM et il a pu faire les manipulations DOM. Il ne peut pas lire les variables de javascript ou d'exécuter des fonctions dans le contexte de la page en cours. Votre code javascript est exécuté dans un bac à sable et que vous êtes seulement limité aux éléments du DOM.
Ce que tu veux dire qu'il fonctionne avec le contenu du script. Oui, vous pouvez injecter du javascript, mais il ne peut pas lire les variables définies dans la page. Vous avez un accès uniquement à la page en cours de l'arborescence DOM.
Je l'ai essayé et il fonctionne. La question que j'ai lié à dit aussi "le code à l'intérieur de votre <script> élément sera exécuté et que le code aura accès à des variables JavaScript à la portée de la fenêtre". stackoverflow.com/questions/3955803/...
Avez-vous lu la deuxième réponse. La dernière fois que j'ai essayé de faire ce que j'ai raté et je suis prêt à convenir avec Chrome
OriginalL'auteur Krasimir
Vous pouvez utiliser un fond de script à exécuter du code JavaScript dans le contexte de la page, cependant, votre JavaScript est exécuté dans un environnement isolé à partir du code JavaScript qui est chargé à partir de l'intérieur de la page.
De considérer les éléments suivants:
Dans page.html:
En arrière-plan script:
Maintenant, si vous cliquez sur le bouton dans la page, vous trouverez à la fois des messages de journal dans la fenêtre de la console. Le JavaScript, les contextes sont isolés les uns des autres, avec les exceptions notables de messagerie via postMessage et par la partagé DOM.
OriginalL'auteur Ryan Kimber