Pan*_*mar 3 firefox-addon-sdk content-script html5-filesystem
有没有办法在内容脚本中访问Fire Fox插件sdk中的Html5文件api?
这是为了存储用户添加的单词及其含义所必需的.数据可能会变大,因此本地存储不是一种选择.
window.requestFileSystem3 = window.requestFileSystem || window.webkitRequestFileSystem;
Run Code Online (Sandbox Code Playgroud)
给我错误TypeError:window.requestFileSystem3不是一个函数.
我问这个是因为我从Google Chrome扩展程序移植此代码,允许在内容脚本中访问文件api.
其他问题
1)如果不允许HTML5文件API,那么我应该使用文件模块吗?
2)文件模块是否允许访问文件系统上的任何文件,而不是只访问沙盒访问文件系统的Html5文件api?
3)假设我必须使用文件模块什么是存储我的文件的最佳位置(如用户配置文件目录或扩展目录)以及如何在代码中获得此路径.
我为这个问题中的许多子问题道歉.谷歌对这个话题并不是很有帮助.
任何示例代码都非常有用.
Firefox不支持通过File API编写文件,即使添加了这些文件,它也可能只能访问网页而不能扩展.换句话说:是的,如果您绝对需要写入文件,那么您应该使用低级API.您希望将数据存储在用户配置文件目录中(没有扩展目录,您的扩展名通常作为单个打包文件安装).像这样的东西应该可以写一个文件:
var file = require("sdk/io/file");
var profilePath = require("sdk/system").pathFor("ProfD");
var filePath = file.join(profilePath, "foo.txt");
var writer = file.open(filePath, "w");
writer.writeAsync("foo!", function(error)
{
if (error)
console.log("Error: " + error);
else
console.log("Success!");
});
Run Code Online (Sandbox Code Playgroud)
您可以使用TextReader.read()或file.read()读取文件.遗憾的是,附加SDK似乎不支持异步文件读取,因此读取将阻止Firefox UI.唯一的选择将进口NETUTIL和文件实用程序通过镀铬的权威,这样的事情:
var {components, Cu} = require("chrome");
var {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", null);
var {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", null);
NetUtil.asyncFetch(new FileUtils.File(filePath), function(stream, result)
{
if (components.isSuccessCode(result))
{
var data = NetUtil.readInputStreamToString(stream, stream.available());
console.log("Success: " + data);
}
else
console.log("Error: " + result);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1576 次 |
| 最近记录: |