62 votes

L'objet fenêtre peut-il être modifié à partir d'une extension Chrome ?

Je voudrais faire une extension Chrome qui fournit un nouvel objet à l'intérieur de window . Lorsqu'une page web est affichée dans un navigateur avec l'extension chargée, je voudrais que window.mything pour être disponible via Javascript. Le site window.mything aura quelques fonctions que je définirai dans l'extension, et ces fonctions devront être appelables à partir de console.log ou tout autre fichier Javascript lorsque la page est affichée dans un navigateur dont l'extension est activée.

J'ai pu injecter avec succès un fichier Javascript dans la page en utilisant une balise Contenu script :

var s = document.createElement("script"); 
s.src = chrome.extension.getURL("mything.js");
document.getElementsByTagName("head")[0].appendChild(s);

mything.js ressemble à ceci :

window.mything = {thing: true};
console.log(window);

A chaque fois qu'une page se charge, je vois l'ensemble de la page window comme je l'attends dans la console. Cependant, je ne peux pas interagir avec l'objet window.mything à partir de la console. Il semble que si le script injecté n'a pas vraiment modifié l'objet global de la console, il n'en est rien. window objet.

Comment puis-je modifier l'interface globale window à partir d'une extension Chrome ?

1voto

010011100101 Points 1173

Grâce aux autres réponses données ici, voici ce que j'utilise :

((source)=>{
  const script = document.createElement("script");
  script.text = `(${source.toString()})();`;
  document.documentElement.appendChild(script);
})(function (){

  // Your code here
  // ...

})

Fonctionne très bien, pas de problèmes.

-2voto

Joseph Lust Points 4961

Contenu scripts peut appelez window qui peuvent ensuite être utilisées pour muter l'élément window objet. C'est plus facile que <script> et fonctionne même lorsque la balise <head> y <body> n'ont pas encore été analysés (par exemple, lors de l'utilisation de l'option run_at: document_start ).

// In Content Script
window.addEventListener('load', loadEvent => {
    let window = loadEvent.currentTarget;
    window.document.title='You changed me!';
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X