8
votes

Chargement d'une image à partir d'une extension chromée sur une page

J'ai des images dans mon extension chromée que je souhaite que l'utilisateur puisse être en mesure d'injecter dans leur page lorsqu'il utilise l'extension.

Les images apparaîtront dans la fenêtre contextuelle d'extension, mais Lorsque l'utilisateur clique sur le bouton pour les injecter dans la page, la page ne peut pas y accéder / les voir pour une raison quelconque. Je sais qu'il existe des moyens spécifiques d'injecter des JS et CSS dans la page (le faire déjà cela), mais je ne vois pas de moyen de faire la même chose avec des images.

J'ai l'ensemble des autorisations suivantes dans mon manifeste (ajouté les extensions chromées: // une espérance qui le ferait): xxx

spécifiquement, j'essaie de changer le Favicon, genre de comme ça (J'ai aussi essayé sans le dirigeant /, et avec chrome.extension.geturl ("favicons / exemple.png")): xxx

Ce code fonctionne parfaitement si le iconurl est un adresse http: // entièrement qualifié ...

Vous pouvez voir le code réel de mon GitHub Repo ici (Favicon.js Line 54, appelée par Tabdisplay.js Line 260).


2 commentaires

L'accès à des fichiers à partir de l'extension doit être accordé par défaut. Comment essayez-vous de les charger et quels types de messages d'erreur (s'il y a) êtes-vous?


Aucune erreur, rien ne se passe. Il est juste assis là.


5 Réponses :


15
votes

au lieu de: xxx

Il devrait être: xxx

qui renvoie une URL absolue à un dossier d'extension de fichier.

supprimer également chrome-extension: // * / * du manifeste car il ne fait rien.


2 commentaires

@CMCULLOH HM, vous avez raison, cela ne fonctionne pas, mais cela devrait. Si vous essayez d'injecter l'icône sous la forme d'une balise sur une page, il fonctionne, tandis que dans Tag Non. Cela ressemble à un bug chrome.


J'ai enlevé le premier / et ça marche bien. N'oubliez pas de l'ajouter dans vos ressources Web autorisées dans le manifeste.



2
votes

Étant donné que vous essayez d'ajouter une image de l'extension dans une page Web, il existe des mesures de sécurité qui ne permettent pas directement d'utiliser un chrome: // code> URL pour charger des éléments comme des images.

Une solution à laquelle je peux penser est d'encoder l'image dans une URI de données et de l'envoyer en tant que texte, puis de l'utiliser comme SRC de l'IMG. P>

  iconURL = "/favicons/example.png";
  var link = document.createElement("link");
  link.type = "image/x-icon";
  link.rel = "shortcut icon";
  //convert iconURL into data uri (data:image/png;base64,...)
  link.href = iconURL;
  this.removeLinkIfExists();
  this.docHead.appendChild(link);


0 commentaires

21
votes

Dans le cas où les gens ont ce problème sur chrome 17 ou plus tard, c'est parce que le manifeste doit inclure la section Web_accessible_Resources pour permettre une image emballée dans l'extension à injecter dans une page Web. ressources accessibles au Web


1 commentaires

OUI! C'était le problème que j'avais, merci beaucoup! :RÉ



4
votes

Vous pouvez également utiliser de CSS, assurez-vous d'ajouter cette image dans le manifeste également.

background-image: url("chrome-extension://__MSG_@@extension_id__/image.png");


3 commentaires

Quel est msg ?


@maxgalbu j'ai oublié pourquoi il a ajouté. Mais je pense avoir une URL d'extension chrome. ou vous pouvez même essayer chrome.extension.geturl


Essayé et ça marche, je pensais que c'était une sorte de constante à remplacer



0
votes

the acier La réponse est OK mais limitée, si vous souhaitez introduire une image dans le document, pas comme arrière-plan de Un div, vous pouvez faire comme suit.

p>

<img id="divId" src="chrome-extension://__MSG_@@some_Chrome_Extension_Id/path/image.png">


1 commentaires

__Msg _ @ @ pourrait être omis.