Firefox 尚不支持通过文件 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!");
});
以供参考:sdk/io/file https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/io/file.html, sdk/system https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/system.html
你可以使用TextReader.read()
or file.read()
读取文件。不幸的是,Add-on SDK 似乎不支持异步文件读取,因此读取会阻塞 Firefox UI。唯一的选择是进口NetUtil https://developer.mozilla.org/en-US/docs/JavaScript_code_modules/NetUtil.jsm and 文件工具 https://developer.mozilla.org/en-US/docs/JavaScript_code_modules/FileUtils.jsm通过 chrome 权威,像这样:
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);
});