Components.utils.import

这个方法在 Firefox 3 中被引入,它使得在不同的作用域之间分享代码变得更加容易。例如:你可以直接导入 XPCOMUtils.jsm 而不必复制/粘贴冗长的XPCOM组件。

查看 Using JavaScript code modules 了解更多细节。

Note: Prior to Gecko 2.0, JavaScript code modules could only be loaded using file: or resource: URLs. Gecko 2.0 adds support for loading modules from chrome: URLs, even those inside JAR archives.

Syntax(语法)

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

// Or, if you use a tool such as jslint which reports compiler errors for the above,

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

Parameters(参数)

url
一个将被导入的script的URL,这个URL必须是在磁盘上的一个文件,可能在JAR之中。
scope
一个可选的导入对象,如果省略则使用全局对象。当读取文件发生错误(如语法错误等)时会抛出异常。

Example(例子)

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

Difference from mozIJSSubScriptLoader(与mozIJSSubScriptLoader的区别)

The differences from mozIJSSubScriptLoader:

  • The behavior when importing/loading the same code from different locations:
    • the subscript loader evaluates the specified code each time it is invoked, with the caller's global object.
    • Components.utils.import evaluates the code of each module only once, in its own scope.

    例如:

    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);
    

    ...returns true, whereas:

    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);
    

    ...returns false.

    这意味着 Components.utils.import 更适合用于在不同的作用域JS脚本之间分享代码(数据)

Additional Resources(其他资源)

 

 

Document Tags and Contributors

Contributors to this page: LinusYu
最后编辑者: LinusYu,