aboutsummaryrefslogtreecommitdiff
path: root/files/fr/components.utils.import/index.html
blob: 7e0b6da116a043a37bfc0ff225a68578de94bc65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
---
title: Components.utils.import
slug: Components.utils.import
tags:
  - NeedsContent
  - 'XPCOM:Liaisons_de_langage'
  - XPConnect
translation_of: Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.import
---
<p>

</p><p>Cette méthode a été introduite dans <a href="fr/Firefox_3">Firefox 3</a> et est utilisée pour partager aisément du code entre différentes visibilités. Par exemple, il est possible d'importer <a href="fr/XPCOMUtils.jsm">XPCOMUtils.jsm</a> pour éviter de copier/coller de longs pavés d'enregistrement de composants XPCOM dans vos fichiers de composants.
</p><p>Consultez le <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=238324" title="FIXED: Implement JavaScript code-sharing module system">bug 238324</a>, la documentation dans <a href="https://dxr.mozilla.org/mozilla-central/source/js/src/xpconnect/idl/xpccomponents.idl" rel="custom">xpccomponents.idl</a> ainsi que les tests dans <code><a href="https://dxr.mozilla.org/mozilla-central/source/js/src/xpconnect/tests/unit/" rel="custom">js/src/xpconnect/tests/unit/</a></code> pour plus de détails et des exemples.
</p>
<h3 id="Diff.C3.A9rences_avec_mozIJSSubScriptLoader" name="Diff.C3.A9rences_avec_mozIJSSubScriptLoader"> Différences avec mozIJSSubScriptLoader </h3>
<p>Les différences avec <code><a href="/fr/docs/Mozilla/Tech/XPCOM/Reference/Interface/mozIJSSubScriptLoader" title="">mozIJSSubScriptLoader</a></code> sont les suivantes :
</p>
<ul>
<li>Le comportement d'importation/chargement du même code depuis différents emplacements :
<ul><li>le chargeur de sous-script évalue le code indiqué à chacune de ses invocations, avec l'objet global de l'appelant.</li>
<li><code>Components.utils.import</code> évalue le code de chaque module une seule fois, dans sa propre visibilité.</li>
</ul>
<p>Par exemple :
</p>
<pre>var scope1 = {}, scope2 = {};
Components.utils.import("rel:XPCOMUtils.jsm", scope1);
Components.utils.import("rel:XPCOMUtils.jsm", scope2);
assert(scope2.XPCOMUtils === scope1.XPCOMUtils);
</pre>
<p>à comparer avec :
</p>
<pre>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(obj1.XPCOMUtils === obj2.XPCOMUtils);
</pre>
<p>Cela signifie que <code>Components.utils.import</code> est plus adapté pour le partage efficace de code (et de données ?) entre différents scripts exécutés dans des visibilités différentes.
</p>
</li>
<li>Le chargeur de sous-script accepte une URL vers le code à charger, tandis qu'<code>import</code> n'accepte que des URI <code>resource:</code> (celles-ci sont à documenter).</li>
</ul>
<p><br>
</p>
<div class="noinclude">
</div>