我正在Linux上的Firefox 24中编写一个简单的插件。
我得到错误:
ReferenceError: TextEncoder is not defined
当我这样做时:var encoder = new TextEncoder();
我正在使用的功能是:
function write_text(filename, text) {
var encoder = new TextEncoder();
var data = encoder.encode(text);
Task.spawn(function() {
let pfh = OS.File.open("/tmp/foo", {append: true});
yield pfh.write(text);
yield pfh.flush();
yield pfh.close();
});
}
最佳答案
嗯,您使用的是SDK,在重新阅读您其他问题的实际错误时,我会进行收集。
TextEncoder
,因为SDK模块缺少该类。 yield
OS.File.open。 append:
仅在Firefox 27+中受支持.flush()
仅在Firefox 27+中受支持(无论如何都是一个坏主意)。如果需要,请使用.writeAtomic
。 write: true
写入文件。 这是我在Firefox 25(
main.js
)中测试的完整的有效示例const {Cu} = require("chrome");
// It is important to load TextEncoder like this using Cu.import()
// You cannot load it by just |Cu.import("resource://gre/modules/osfile.jsm");|
const {TextEncoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
const {Task} = Cu.import("resource://gre/modules/Task.jsm", {});
function write_text(filename, text) {
var encoder = new TextEncoder();
var data = encoder.encode(text);
filename = OS.Path.join(OS.Constants.Path.tmpDir, filename);
Task.spawn(function() {
let file = yield OS.File.open(filename, {write: true});
yield file.write(data);
yield file.close();
console.log("written to", filename);
}).then(null, function(e) console.error(e));
}
write_text("foo", "some text");