2012-11-18 15 views
7

Attualmente sto sviluppando un'estensione per Firefox utilizzando l'SDK add-on e ho riscontrato un problema reale. In pratica la mia estensione solo inietta uno script contenuto in una pagina web come questo:Url immagine relativa nello script di contenuto nell'SDK add-on per Firefox

main.js

var pageMod = require("page-mod"); 
var self = require("self"); 

pageMod.PageMod({ 
    include: "http://mail.google.com/mail/*", 
    contentScriptFile: [self.data.url("jquery.js"), 
         self.data.url("start.js")], 
    attachTo : ["top"] 
}); 

start.js

$('body').append('<div>1</div><img src="insertnote.png" /><div>2</div>'); 

Sia start.js e insertnote.png si trovano nel cartella dati Tutto funziona tranne l'immagine. Non riuscivo a trovare come ottenere l'url reale per il tag immagine. L'url relativo non sembra funzionare. :(

è che anche possibile includere immagini interiori del addon all'interno degli script contenuti o devo solo usare URL assoluti al mio webserver?

+0

possibile duplicato di [Come fare riferimento a un file nella directory di dati di un'estensione per Firefox?] (Http://stackoverflow.com/questions/11551467/how-to-reference-a-file-in-the-data-directory-of-a-firefox-extension) –

risposta

2

Il seguente c ode dovrebbe funzionare

main.js

var pngurl = self.data.url("insertnote.png"); 

//inside PageMod constructor 
onAttach: function(worker) { 
    worker.port.emit("imageurl",pngurl); 
} 

start.js

self.port.on("imageurl", function(imgurl){ 
    var img = document.createElement("img"); 
    img.src = imgurl; 
    document.body.appendChild(img); 
}); 

Naturalmente sarebbe più efficiente di passare un solo oggetto che contiene l'URL di ogni bene.

+1

Questa sembra un'opzione anche se piuttosto dolorosa. Ma grazie comunque accetto questa risposta –

+1

contentScriptOptions può anche ottenere questo valore dove serve. Vedi la risposta qui sotto. –

0

Il problema è che gli URL relativi vengono interpretati rispetto al documento, che in questo . caso è la pagina, dal momento che si sta mettendo la direttamente nella pagina, come una stringa

in generale, le pagine può link per le immagini in un add-on se l'add-on in modo esplicito dice, hanno per utilizzare l'chrome appropriato: // URI per farlo

+0

Puoi fare un esempio su come usare chrome: // URI nel mio caso? –

+0

Sì, per favore fai un esempio. Ho provato ad aggiungere 'contentaccessible = yes' a un percorso ma non sembra funzionare: [Come faccio a rendere accessibile un'immagine che risiede all'interno di un componente aggiuntivo di Firefox SDK?] (Http://stackoverflow.com/q/23804391) – rubo77

+0

@BorisZbarsky: Sì, si prega di fare un esempio. Ho provato ad aggiungere 'contentaccessible = yes' a un percorso ma non sembra funzionare: [Come faccio a rendere accessibile un'immagine che risiede all'interno di un componente aggiuntivo di Firefox SDK?] (Http://stackoverflow.com/q/23804391) – rubo77

14

È possibile utilizzare "contentScriptOptions" per passare i valori negli script di contenuto.

main.js

var pageMod = require("sdk/page-mod"); 
var self = require("sdk/self"); 
pageMod.PageMod({ 
    include: "http://mail.google.com/mail/*", 
    contentScriptFile: [self.data.url("jquery.js"), 
         self.data.url("start.js")], 
    attachTo : ["top"], 
    contentScriptOptions: { 
    pngUrl: self.data.url("insertnote.png") 
    } 
}); 

start.js

$('body').append('<div>1</div><img src="' + self.options.pngUrl + '" /><div>2</div>'); 
Problemi correlati