使用网页上的本地文件



我正试图在FireFox的网页上使用本地图像。问题是无论我做什么,我都会看到一条安全消息,图像无法加载:

Security Error: Content at http://domain.com/ may not load or link to file:///E:/path/to/file/file.png.

我将以下内容放入user.js中,并将该文件复制到FireFox配置文件目录中。

user_pref("capability.policy.policynames", "localfilelinks");
user_pref("capability.policy.localfilelinks.sites",  'http://domain.com');
user_pref("capability.policy.localfilelinks.checkloaduri.enabled", "allAccess");

我想做的是添加css文件并使用它来设置页面样式。

编辑:我写了一个扩展,它可以更改HTTP响应并用本地css文件替换远程css文件。但正如我所说,Firefox阻止加载本地css文件。

编辑2
请执行从该问题中删除firefox-addon标记。

不要这样做-对file://协议的访问被锁定是有原因的。如果您的目标是用本地数据替换图像,那么就不要使用file://协议,还有很多其他协议可用。例如,您可以使用data:协议。这是作为data:URL:的SO图标

数据:image/png;底座64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAABrUlEQVR42mNkwAOepOgxMTD9mwhk5gDxQSB2l5l15SeyGkYGAuBJMtAQ5n%2BrgcwgIF4ENCCeJAOghvADXbIHqNoEyK0BGtKK14DXU9lAThZiYPw%2FXTTr92uId3SVgKoPA8WkgNxIoCErsBrwdhoL57%2F%2FTGeATC0gfgVUMRo%2BzRjD86RrmzH8ZT4E5IOU%2BgAN2YNhwMOJ%2Fy8bJ%2BVgGYnAQ3K%2Ff%2BkQco%2FYDjP%2FeHs%2FNQyub%2FN44NQJe0ysy5VI83DF5M5pRkY%2FmVyfCfIRtomNB%2Fpv9v%2F%2F9infbnucgZ5l%2FMW8T7HvxDMWB9hT3nXwbmrH%2F%2FmO4Bubc4Wb%2Ff9W09%2BuNmjwQPP%2FvHNHaWXwX%2FGf7LsjD9k%2BFLZ3iKEQYbKmy1%2FjKwXIXx%2F%2F1nfPvP%2FMVJsZ%2FRzlYfpwX4nj%2FT5zrNbtK8evlWGNhcYU3Px%2FDR%2Bf%2FDExGQK4pEKsCseJ%2FoDKgF0AGMvxjZLIP79xzCMWA3 Jyc%2FyB68pQpGGEuyJEhJXhtwYLELMx%2FNL9wcDRcfqLwjOYegwDYGxcAFkNbQxgIALgNIBUQBUDAFi2whGNUZ3eAAAAAElFTkSuQmCC

此URL很容易生成:

var url = "data:image/png;base64," + btoa(imageData);

或者,您也可以使用resource://URL,这些URL可以通过nsIResProtocolHandler映射到磁盘上的目录,但这更复杂。请记住,所有网站都可以访问映射目录的所有内容。你应该确保它不包含任何敏感信息。

Asker:*我添加了链接的内容:

var ioService = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var resProt = ioService.getProtocolHandler("resource")
.QueryInterface(Components.interfaces.nsIResProtocolHandler);
var aliasFile = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
aliasFile.initWithPath("/some/absolute/path");
var aliasURI = ioService.newFileURI(aliasFile);
resProt.setSubstitution("myalias", aliasURI);
// assuming the code modules are in the alias folder itself
这是正确的。试图直接使用用户文件系统之外的映像是一个安全漏洞。较新的浏览器已经实现了FileReader API,它允许您以安全的方式访问用户的文件。

以下是几个例子:

http://www.html5rocks.com/en/tutorials/file/dndfiles/

http://html5demos.com/file-api

我怀疑这是否值得,但您可以将httpd.js用作XPCOM组件。

编辑:我刚刚意识到插件SDK提供httpd.js

相关内容

  • 没有找到相关文章