Components.utils.import

This is an archived page. It's not actively maintained.

Este m茅todo fue introducido en Firefox 3 y es usado para compartir c贸digo entre diferentes alcances(scopes) de forma sencilla. Por ejemplo, puedes importar XPCOMUtils.jsm para evitar copiar y pegar grandes porciones comunes de c贸digo de registraci贸n de componentes XPCOM en tus archivos de compomentes.

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

Para documentaci贸n mira Usando m贸dulos de c贸digo JavaScript.

Diferencias con mozIJSSubScriptLoader

Las diferencias con mozIJSSubScriptLoader son:

  • El comportamiento cuando se importa/carga el mismo c贸digo desde diferentes lugares:
    • el cargador de subscrip evalua el c贸digo especificado cada vez que es invocado, con el objeto global del llamador.
    • Components.utils.import evalua el c贸digo de cada m贸dulo s贸lo una vez, en su propio alcance(scope).

    Por ejemplo:

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

    ...retorna true, mientras que:

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

    ...retorna false.

    Esto significa que Components.utils.import es m谩s apropiado para compartir c贸digo (y datos?) eficientemente entre scripts JS corriendo en diferentes alcances (scopes).

  • El cargador de subscript acepta una URL para el c贸digo a cargar, mientras que import s贸lo acepta resource: y file: URIs.

Recursos Adicionales