Dans certains cas, votre application XUL doit pouvoir ouvrir des applications externes pour certains types de traitement. Elle doit également pouvoir transmettre à cette application des arguments, comme vous le feriez depuis une ligne de commande.
L'interface utilisée ici permet d'exécuter une application externe de façon bloquante ou non ; c'est à dire que le JavaScript peut attendre que cette dernière ait terminée et soit fermée automatiquement ou par l'utilisateur.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="[[chrome://global/skin/]]" type="text/css"?>
<window title="Exécution de programmes externes"
[[xmlns:html="!http://www.w3.org/1999/xhtml]]"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script><![CDATA[
function process() {
//Création d'un objet nsILocalFile pour l'application
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
var app = document.getElementById('prgm').value;
file.initWithPath( app );
//Création du processus
var process = Components.classes["@mozilla.org/process/util;1"]
.createInstance(Components.interfaces.nsIProcess);
process.init(file);
//Exécution du processus
//Si le premier paramètre est true, le script sera bloqué jusqu'à la fin du processus
//Les seconds et troisièmes paramètres sont les arguments transmis à l'application
//(Le troisième étant le nombre d'arguments). Ils sont récupérés depuis le champ XUL
//et coupés dans un tableau par le split()
var args = document.getElementById('args').value.split(' ');
process.run(false, args, args.length);
}
]]></script>
<[[html:h1>Exécution]] d'applications externes</[[html:h1]]>
<hbox>
<label value="Nom du programme :"/>
<textbox id="prgm" value="/usr/bin/openoffice.org-2.0"/>
</hbox>
<hbox>
<label value="Arguments :"/>
<textbox id="args" value="http://fr.openoffice.org/Documentation/Guides/parcours_texte_ooo_v2.odt
http://fr.openoffice.org/Documentation/Guides/parcours_calc_OOo_version2.odt" flex="1"/>
</hbox>
<label value="Séparez les arguments par des espaces"/>
<hbox>
<button label="Exécuter" oncommand="process()"/>
</hbox>
</window>
Le script va ici récupérer le chemin complet de l'application dans le champ de saisie XUL (par défaut, le code propose OOo 2.0) dans la variable app. Un objet nsILocalFile est alors instancié avec ce chemin.
Ensuite, un processus doit être initialisé pour accéder à cette application instancié précédemment. L'objet process contient alors cette information.
Il ne reste qu'à lancer ce processus avec les arguments adéquats (récupérés ici également depuis un champ de saisie XUL).
Le premier argument de la méthode run est ici à false, ce qui signifie que le JavaScript ne sera pas bloqué sur cette ligne. Si cet argument était à true, en plus du JavaScript, c'est toute l'interface utilisateur XUL qui est bloquée (ce qui bloquerait entièrement votre navigateur Firefox par exemple). Il est donc conseillé de n'utiliser cet argument à true que pour l'exécution de processus très courts.
Cet exemple utilise par défaut un chemin vers l'application OpenOffice.org 2.0. Bien entendu, vous devez indiquer ici le chemin complet vers n'importe quelle application que vous souhaitez tester.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.