7

我目前正在使用 Add-On 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"]
});

开始.js

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

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

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

4

3 回答 3

13

您可以使用“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")
  }
});

开始.js

$('body').append('<div>1</div><img src="' + self.options.pngUrl + '" /><div>2</div>');
于 2013-05-31T02:30:16.807 回答
2

以下代码应该可以工作

main.js

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

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

开始.js

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

自然,只传递一个包含每个资产 url 的对象会更有效。

于 2012-11-19T21:15:34.597 回答
0

问题是相对 URL 是相对于文档解释的,在这种情况下是页面,因为您将直接作为字符串放入页面中。

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

于 2012-11-19T04:47:50.197 回答