15

Linux の Firefox - 24 で簡単なアドオンを作成しています。エラーが発生します:

ReferenceError: TextEncoder is not defined

私がするとき: var encoding = 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(); 
    });
}
4

15 に答える 15

28

ノードサーバーの実行中にこのエラーが発生した場合

このファイルを見つけますnode_modules/whatwg-url/dist/encoding.js

この行を先頭に追加しますconst { TextEncoder, TextDecoder } = require("util");

于 2021-09-22T15:54:13.300 に答える
21

nodejs では、util で解決できます。

var util= require('util');
var encoder = new util.TextEncoder('utf-8');
于 2019-05-14T10:21:12.547 に答える
7

経由で Mongodb を使用しているためにこれを経験した場合npm install mongodb、最も簡単な方法は Node Version をアップグレードすることです。バージョン 12 以降である必要があります。バージョン16を使用しましたが、問題が明確に修正されました

于 2021-10-13T08:38:25.180 に答える
6

ああ、あなたはSDKを使用しています。他の質問の実際のエラーを読み直すと収集します。

  • TextEncoderSDK モジュールにはクラスがないため、他のモジュールから明示的にインポートする必要があります。
  • yieldOS.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");
于 2013-10-31T08:20:19.867 に答える
1

モジュールTextEncoderで見つけることができます:sdk/io/buffer

let { TextEncoder, TextDecoder } = require('sdk/io/buffer')
于 2013-10-31T22:55:38.523 に答える
0
  1. この問題は、ノード 10 以下のバージョンでのみ発生します。この問題を解決するupgrade node version to 12 or higherにはrm -rf node_modules && npm i

  2. または、ノードのバージョンをアップグレードしたくない場合は、

    このファイルを見つけます

    node_modules/whatwg-url/dist/encoding.js // If dist folder
    
    node_modules/whatwg-url/lib/encoding.js // If lib folder
    

    そして、この行をencoding.jsファイルに追加します

    const { TextEncoder, TextDecoder } = require("./utils"); // if utils file
    
    const { TextEncoder, TextDecoder } = require("./util"); // if util file
    
于 2022-02-23T05:58:49.050 に答える