2010-10-18 3 views
22

Je développe une extension google chrome et je rencontre un problème de chemin relatif. Si je donne un chemin relatif à une image et que j'ouvre le plugin dans une certaine page, il cherchera cette image dans le chemin du site plutôt que dans celui de l'extension.Chemin relatif de l'extension Google Chrome

Des idées?

+0

Publier un exemple. Cela fonctionne normalement. – bzlm

+0

est ici un exemple: background-image: url ('sprites.png') l'erreur: Impossible de charger la ressource: le serveur a répondu avec un statut de 404 (Introuvable) sprites.png Si j'utilise un chemin absolu comme, chrome-extensions: // pfionnbgiepoddidhifofhiijoojachg/images, il trouve l'image sans problème. – ForeignerBR

Répondre

66

Si vous utilisez CSS dans vos pages d'extension (arrière-plan, pop-up, Infobar, etc.), vous pouvez utiliser des chemins relatifs avec une barre oblique (/):

background-image:url("/sprites.png"); 

Le devrait fonctionner au-dessus, tout le monde utilise il. Mais, si vous utilisez pour les scripts de contenu et vous pouvez faire la même chose pour tout css, vous devez utiliser le predefined message comme:

background-image:url('chrome-extension://[email protected]@extension_id__/sprites.png'); 

Si vous souhaitez définir par programmation, vous pouvez utiliser la syntaxe chrome.extension.getURL comme suivant:

var url = chrome.extension.getURL('sprites.png'); 

Voici comment vous pouvez vous référer à une URL/image spécifique.

En outre, en tant que mentioned in this answer, si vous placez vos actifs d'image dans un répertoire, ces fichiers ne sont pas automatiquement accessibles dans la page Web DOM. Le développeur doit spécifier les ressources qui peuvent être chargées sur la page en utilisant le paramètre "web_accessible_resources" dans le fichier manifest.json:

+1

laissez-moi voir si je comprends, je ne peux utiliser des chemins relatifs dans mon backround, popup, infobar, et d'autres pages comme ça.Si je me réfère à une image dans un script de contenu ou un CSS, je dois utiliser un message prédéfini comme expliqué ci-dessus. Est-ce exact? – ForeignerBR

+0

Oui, ça sonne bien. –

+0

NB: Actuellement, cette technique ne fonctionnera pas pour les fichiers CSS de script de contenu, car ils ne peuvent pas utiliser les messages prédéfinis tels que @@ ID_addition. Pour plus de détails, voir bug 39899 (http://crbug.com/39899) –

8

@ La réponse de mohamed a fonctionné pour moi mais j'ai mis un peu de temps pour tout mettre ensemble. J'ai répondu à cette question mais où est la solution qui a fonctionné pour moi.

Ma solution.

Avec Menifest v2, vous devez ajouter web_accessible_resources au fichier, puis utiliser chrome-extension://[email protected]@extension_id__/images/pattern.png comme URL dans votre fichier css.

CSS:

#selector { 
     background: #fff url('chrome-extension://[email protected]@extension_id__/images/pattern.png'); 
} 

manifest.json

{ 
    "manifest_version": 2, 

    "name": "My Extension Name", 
    "description": "My Description", 
    "version": "1.0", 

    "content_scripts": [ 
     { 
     "matches": ["https://mydomain.com/*"], 
     "css": ["style.css"] 
     } 
    ], 

    "permissions": [ 
    "https://mydomain.com/" 
    ], 
    "browser_action": { 
     "default_icon": {      
      "19": "images/icon19.png",   
      "38": "images/icon38.png"   
     }, 
     "default_title": "My Extension Name" 
    }, 
    "web_accessible_resources": [ 
     "images/pattern.png" 
    ] 
} 

P.S. Votre fichier manifest.json peut sembler différent de celui-ci.

1

Dans certains cas, vous pouvez même utiliser le codage en ligne base64 de l'image. Par exemple,

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB..." /> 

Même chose que vous pouvez appliquer à votre CSS. Vous pouvez trouver des encodeurs d'image sur tout le web.