2012-11-18 17 views
7

Şu anda Add-On SDK kullanarak bir Firefox eklentisi geliştiriyorum ve gerçek bir soruna çarptı.Firefox'ta içerik komut dosyasındaki bağıl görüntü URL'si Add-On SDK

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>'); 

Hem start.js ve insertnote.png bulunur: Temelde Uzantımın sadece böyle bir web sayfası içine bir içerik komut dosyası enjekte veri klasörü. Her şey görüntü dışında çalışır. Resim etiketi için gerçek URL’yi nasıl alacağımı bulamadım. Göreceli url çalışmıyor gibi görünüyor. :(

bile mümkündür içerik komut içine addon iç görüntüleri dahil etmek veya sadece benim sunucunuza mutlak URL'ler kullanması gerektiğini mı?

+0

olası yinelenen [bir Firefox uzantısı veri dizininde bir dosya başvurusu nasıl?] (Http://stackoverflow.com start.js/questions/11551467/nasıl yapılır-başvuru-bir-dosya-in-the-firefox-uzantısı-dosya) –

cevap

2

Aşağıdaki c gazel her öğenin url içeren sadece bir nesne geçmesine

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); 
}); 

Doğal olarak daha verimli olacaktır çalışmalıdır.

+1

Bu oldukça acı verici olsa da bir seçenek gibi görünüyor. Ama yine de bu cevabı kabul ediyorum –

+1

contentScriptOptions bu değeri de ihtiyacınız olan yere ulaştırabilir. Aşağıdaki cevaba bakınız. –

0

sorun göreli URL'ler belgeye göre yorumlanır yani, bu hangi sayfa, bir dize olarak doğrudan sayfaya koyduğunuzdan sayfadır.

Genel olarak, sayfa , eklenti açık bir şekilde belirtiyorsa eklentilere resimler ekleyebilirsiniz. Bunu yapmak için uygun chrome: // URI kullanmak için:

+0

Benim durumumda chrome: // URI nasıl kullanılır örnek verebilir misiniz? –

+0

Evet, lütfen bir örnek verin. Bir yola "contentaccessible = yes" eklemeyi denedim ancak işe yaramaz gibi görünmüyor: [Firefox SDK Addon içinde bulunan bir görüntüyü nasıl erişilebilir yapabilirim?] (Http://stackoverflow.com/q/23804391) – rubo77

+0

@BorisZbarsky: Evet, lütfen bir örnek verin. Bir yola "contentaccessible = yes" eklemeyi denedim ancak işe yaramaz gibi görünmüyor: [Firefox SDK Addon içinde bulunan bir görüntüyü nasıl erişilebilir yapabilirim?] (Http://stackoverflow.com/q/23804391) – rubo77

14

Değerleri içerik komut dosyalarına iletmek için "contentScriptOptions" öğesini kullanabilirsiniz.

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") 
    } 
}); 

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