ReferenceError:未定义TextEncoder

时间:2013-10-31 03:16:37

标签: javascript firefox-addon firefox-addon-sdk

我正在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(); 
    });
}

3 个答案:

答案 0 :(得分:3)

啊,您正在使用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");

答案 1 :(得分:0)

可以在TextEncoder模块中找到sdk/io/buffer

let { TextEncoder, TextDecoder } = require('sdk/io/buffer')

答案 2 :(得分:0)

在nodejs中,您可以使用util来解决:

var util= require('util');
var encoder = new util.TextEncoder('utf-8');