1

"EXPORTED_SYMBOLSは配列ではありません"Components.utils.import( "chrome://app/content/app1.js");を使用しようとすると例外が発生します。

XULアプリケーションを作成し、JSファイル(app.jsなど)の1つから、上記のように他のJSファイルを含めようとしました。

app.jsとapp1.jsの両方がコンテンツフォルダーに配置され、次の行が追加されたchrome.manifestファイルにも配置されます

「コンテンツアプリコンテンツ/」

他のJSファイル(app1.js)では、次のようなシンボルをエクスポートしました

var EXPORTED_SYMBOLS = ["Fooinstance"];

var Fooinstance = {
   foo: function() {
   ...
   }
}

app.jsでは、

Components.utils.import("chrome://app/content/app1.js"); 
// Error: chrome://app/content/app1.js - EXPORTED_SYMBOLS is not an array 

...
Fooinstance.foo();

このXULアプリをXULRunner17.0.1win32ライブラリで実行しています。

このリンクのコードを調べましたhttps://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Using

それは役に立ちませんでした。リソースとして含めると機能しますが、リソースの一部として含めたくありません。

誰かがどんな間違いがあるか指摘してもらえますか?

4

2 に答える 2

0

私はこれと同じ問題を抱えていましたが、それを解決しました: 1) ファイル拡張子 (.js) を .jsm で変更する 2) 共有するクラスをエクスポートするモジュールに最初の行を追加します。例えば:

var EXPORTED_SYMBOLS = ["Xobject"];

function Xobject(){
}
Xobject.prototype.stop = function() {
    return 'stop';
}
Xobject.prototype.run = function() {
    return 'running';
}

3) このように呼び出す

Components.utils.import('resource://gre/modules/Services.jsm' );
Components.utils.import("chrome://myFirstAddOn/content/Xobject.jsm");

var myXobject = new Xobject();
alert(myXobject.run());

それがあなたを助けることを願っています

于 2013-02-27T23:49:58.653 に答える
0

これを取得している他の人にとって、別の考えられる理由は循環依存です。私の場合は少し異なりましたが、Components.utils.import を使用して相互にインポートする 2 つの JSM ファイルがありました。次に、そのうちの1つでこのエラーが発生しました。

于 2014-08-31T18:54:29.757 に答える