1

Xulアプリケーションの単一ウィンドウでJavascriptモジュール(JSM)を使用したいので、必要に応じてリソースをロードできます。

しかし、ウィンドウをJSMに渡す必要があり、その方法がわかりません。私の試みに従います:

私のresource.jsmで:

var EXPORTED_SYMBOLS = ["hello"];

function hello(win) {
    win.alert("ALERT FROM JSM!");
}

私のウィンドウで呼び出す:

Components.utils.import("resource://module/resource.jsm");
hello(window);

しかし、私は得る:

勝利は未定義です

resource.jsm内。

それを機能させる方法はありますか?

4

1 に答える 1

0

hello関数のパラメーターに。という名前を付けたことが問題の原因になっている可能性がありますwindow。windowは予約語ではありませんが、ほとんどのブラウザ環境では、割り当てられない定数として扱います。試す:

function hello( obj ) {
    obj.alert("ALERT FROM JSM!");
}

hello(window)モジュール内で、、、hello(document.window)またはを使用して呼び出しますhello(this)


Javascriptモジュールのドキュメントを読んだ後、モジュール内にオブジェクトを作成し、参照によってそのプロパティを変更する必要があるようです。したがって、JSMでは:

var EXPORTED_SYMBOLS = ["params", "hello"];

params = {
  win: this
};

function hello() {
    params.win.alert("ALERT FROM JSM!");
}

次に、最初にウィンドウをそのパラメーターに割り当ててから、関数を呼び出すことによって呼び出します。

Components.utils.import("resource://module/resource.jsm");
params.win = window;
hello();

注:これを行うためのより良い方法があるかどうかを知るには、JSMに精通していませんが、これは機能するはずです。

于 2011-05-05T18:41:28.593 に答える