繁体   English   中英

Firefox Add-On SDK中内容脚本中的相对图像URL

[英]Relative image url in content script in Firefox Add-On SDK

我目前正在使用附加SDK开发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>');

start.jsinsertnote.png都位于数据文件夹中。 除了图像,一切都有效。 我只是找不到如何获取图像标记的真实网址。 相对网址似乎不起作用。 :(

是否可以在内容脚本中包含插件的内部图像,或者我应该只使用绝对网址到我的网络服务器?

您可以使用“contentScriptOptions”将值传递到内容脚本中。

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

以下代码应该有效

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

当然,只传递一个包含每个资产网址的对象会更有效率。

问题是相对URL是相对于文档解释的,在本例中是页面,因为您将字符串直接放入页面中。

通常,如果加载项明确说明,页面可以链接到加载项中的图像; 他们必须使用适当的chrome:// URI来做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM