我和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");
以下,它就不会显示起来。因此,我怀疑动态创建资源的代码已被破坏。
我做错了什么?最终,如何在客户端的机器上显示图像以显示在互联网页面上?
答案 0 :(得分:0)
您正在编写WebExtensions,因此您尝试使用的API都不存在。
这包括Components.utils.import
,Components.classes
等。您应该在MDN上阅读Working with files以获取想法,仍然可以做到。