Components.utils.import

この翻訳は不完全です。英語から この記事を翻訳 してください。

このメソッドは Firefox 3 で導入され、異なるスコープ間でコードを簡単に共有するのに使われます。例えば、自分のコンポーネントの中で、コンポーネント登録の長い定型文をコピー&ペーストすることを避けるために XPCOMUtils.jsm をインポートすることができます。

詳細は、JavaScript コードモジュールの利用 を参照してください。

注記: Gecko 2.0 以前、JavaScript コードモジュールは file: URL または resource: URL のみでしか読み込めませんでした。Gecko 2.0chrome: URL からの読み込みに対応しました。JAR アーカイブ内にあっても使用できます。

構文

Components.utils.import(url [, scope]);

// 上記のコードでは jslint などの構文チェックツールコンパイラエラーが報告される場合は以下のように書けます。

Components.utils["import"](url [, scope]);

引数

url
読み込まれるスクリプトの URL の文字列。URL は、ディスク上のファイルを指さなくてはなりません。JAR ファイル内を指すことがあります。
scope
スクリプト上にインポートされる任意のオブジェクト。省略した場合、グローバルオブジェクトが使用されます。

Under Boot2Gecko, the scope is not optional. If your code is meant to work on all platforms, you should always provide a scope.

In case of doubt, this is generally a good scope.

return value
the module's global object.
use of the return value is discouraged since it grants access to the module's internal properties which are not part of its public API.

読み込んだファイル内でエラー (構文エラーなど) が発生した場合、import が例外を投げます。

Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");

mozIJSSubScriptLoader との違い

mozIJSSubScriptLoader との違い:

  • 異なる場所から同じコードをインポート/読み込みした時の挙動
    • サブスクリプトローダ (subscript loader) は、特定のコードが実行される度毎に 呼び出し元 (caller) のグローバルオブジェクトで評価します。
    • Components.utils.import はそれぞれのモジュールのコードを一度だけ、自分自身のスコープの中で評価します

    例:

    var scope1 = {}, scope2 = {};
    Components.utils.import("resource://gre/modules/JSON.jsm", scope1);
    Components.utils.import("resource://gre/modules/JSON.jsm", scope2);
    assert(scope2.XPCOMUtils === scope1.XPCOMUtils);
    

    ...true を返します。対して:

    var someURL = "resource://gre/modules/JSON.jsm"; 
    var obj1 = {}, obj2 = {}; 
    var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
                           .getService(Components.interfaces.mozIJSSubScriptLoader); 
    loader.loadSubScript(someURL, obj1); 
    loader.loadSubScript(someURL, obj2);
    assert(obj2 === obj1);
    

    ..false を返します。

    これは、異なるスコープで実行している JS 間での効果的なコード (とデータ?) の共有に Components.utils.import がより適している事を意味しています。

追加リソース

 

ドキュメントのタグと貢献者

 このページの貢献者: lv7777, Marsf, Mgjbot, Potappo, Taken
 最終更新者: lv7777,