如何在firefox插件中设置资源?

时间:2018-01-10 18:09:57

标签: firefox-addon firefox-webextensions

我和this guy基本上有同样的问题。我有一个页面,通过网络访问(好吧,本地内部网,如果这很重要),它需要在客户端的机器上引用图像。我知道那些图像将出现在C:\ pics中。 Internet Explorer让您只需引用它们,但我在使用Internet Explorer时无法正常打印,因此我想尝试使用Firefox。关于这个问题的答案说你可以创建一个" resource"使用firefox附加组件,页面将能够引用。但是,它似乎并没有起作用。我按照how to make your first add-on的指南进行操作,并在mozilla网站上使用了红色边框。我尝试编辑该附加组件以包含一个chrome.manifest文件,该文件只是这样说:

resource exposedpics file:///C:/pics

然后页面(asp页面)引用exposedpics。

<img align=left border="0" src="resource:///exposedpics/<%=Request("Number")%>.jpg" style="border: 3 solid #<%=bordercolor%>" align="right" WIDTH="110" HEIGHT="110">

页面没有显示图片。如果我转到图像上的查看图像信息,我会看到地址是&#34;资源:///exposedpics/8593.jpg" (在我输入8593的例子中),但它没有在这里显示图像。 (是的,图像确实存在于c:\ pics下。如果我转到file:/// C:/pics/8593.jpg,它会加载。)

所以也许我不知道如何使用chrome.manifest。 (我不确定我是否需要在我的manifest.json中以某种方式引用它。我不是。)堆栈溢出问题也说它可以动态创建资源。所以我试着让我的manifest.json说:

{

  "manifest_version": 2,
  "name": "FirefoxPixExposer",
  "version": "1.0",

  "description": "allows websites to access C:\\pics",

  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["expose.js"]
    }
  ]

}

和expose.js说

// Import Services.jsm unless in a scope where it's already been imported
Components.utils.import("resource://gre/modules/Services.jsm");

var resProt = Services.io.getProtocolHandler("resource")
                      .QueryInterface(Components.interfaces.nsIResProtocolHandler);

var aliasFile = Components.classes["@mozilla.org/file/local;1"]
                          .createInstance(Components.interfaces.nsILocalFile);
aliasFile.initWithPath("file:///C:/pics");

var aliasURI = Services.io.newFileURI(aliasFile);
resProt.setSubstitution("ExposedPics", aliasURI);

但是同样的事情发生了,图像没有显示出来。我注意到如果我将document.body.style.border = "5px solid red";放在expose.js的顶部,我确实看到了身体周围的边框,但是如果我将它移动到行Components.utils.import("resource://gre/modules/Services.jsm");以下,它就不会显示起来。因此,我怀疑动态创建资源的代码已被破坏。

我做错了什么?最终,如何在客户端的机器上显示图像以显示在互联网页面上?

1 个答案:

答案 0 :(得分:0)

您正在编写WebExtensions,因此您尝试使用的API都不存在。

这包括Components.utils.importComponents.classes等。您应该在MDN上阅读Working with files以获取想法,仍然可以做到。