如何在火狐插件中设置资源?



我和这个人有基本相同的问题。我有一个页面,通过 Web 访问(嗯,本地 Intranet,如果这很重要的话),它需要引用客户端计算机上的图像。我知道这些图像将出现在C:\pics中。Internet Explorer 只允许您引用它们,但我在使用 Internet Explorer 正确打印时遇到问题,所以我想尝试一下 Firefox。关于这个问题的答案是,你可以创建一个带有Firefox附加组件的"resource",页面将能够引用该插件。但是,它似乎不起作用。我按照指南制作您的第一个附加组件,并获得了红色边框以在 Mozilla 网站上工作。我尝试编辑该附加组件以包含一个 chrome.manifest 文件,该文件仅显示以下内容:

resource exposedpics file:///C:/pics

然后页面(ASP 页面)引用公开的图片。

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

页面不显示图片。如果我转到图像上的"查看图像信息",我会看到地址为"resource:///exposedpics/8593.jpg"(在我的示例中,我输入了 8593),但它没有在此处显示图像。(是的,图像确实存在于 c:\pics 下。 如果我转到 file:///C:/pics/8593.jpg,它会加载。

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

{
"manifest_version": 2,
"name": "FirefoxPixExposer",
"version": "1.0",
"description": "allows websites to access C:\pics",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["expose.js"]
}
]
}

并曝光.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";放在曝光.js的顶部,我确实会看到身体周围的边框,但如果我把它移到线下方Components.utils.import("resource://gre/modules/Services.jsm");它就不会显示出来。因此,我怀疑动态创建资源的代码已损坏。

我做错了什么?最终,我怎样才能让客户端机器上的图像显示在互联网上的页面上?

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

这包括Components.utils.importComponents.classes等。你应该阅读在MDN上使用文件来了解,什么是可能的。

最新更新