【问题标题】:Relative image url in content script in Firefox Add-On SDKFirefox Add-On SDK 中内容脚本中的相对图像 url
【发布时间】:2012-11-18 18:50:39
【问题描述】:

我目前正在使用 Add-On SDK 开发一个 Firefox 扩展,但遇到了一个真正的问题。基本上我的扩展程序只是将内容脚本注入到这样的网页中:

ma​​in.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 都位于数据文件夹中。 除图像外,一切正常。我只是找不到如何获取图像标签的真实网址。相对网址似乎不起作用。 :(

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

【问题讨论】:

标签: javascript firefox firefox-addon firefox-addon-sdk


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    下面的代码应该可以工作

    ma​​in.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 的对象会更有效。

    【讨论】:

    • 这似乎是一种选择,虽然很痛苦。但无论如何,谢谢我接受这个答案
    • contentScriptOptions 也可以将此值获取到您需要的位置。请参阅下面的答案。
    【解决方案3】:

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

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

    【讨论】:

    • 你能举个例子在我的例子中如何使用 chrome:// URI 吗?
    • 是的,请举个例子。我试图将contentaccessible=yes 添加到路径中,但它似乎不起作用:How do I make an image accessible that resides inside a Firefox SDK Addon?
    • @BorisZbarsky:是的,请举个例子。我试图将contentaccessible=yes 添加到路径中,但它似乎不起作用:How do I make an image accessible that resides inside a Firefox SDK Addon?
    • 问题是关于 Firefox 扩展的,你为什么回答 Chrome ?
    • @alihaghighatkhah Firefox 在内部使用 chrome:// URI 来引用浏览器 UI 的某些部分(也称为“chrome”),并且在名为 Chrome 的浏览器出现并试图占用之前很多年都这样做了作为品牌名称的部分 UI 的通用术语。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多