Ressources Libs/filemanager

Lancement du gestionnaire de fichiers de votre système

Il peut être parfois utile que votre application charge et ouvre l'explorateur de fichiers de votre système d'exploitation. La solution n'est pas simple car elle nécessite une petite adaptation selon si le système accepte ou non la méthode reveal().

http://xulfr.org/images/RessourcesLibs_filemanager.png

Le code

 <?xml version="1.0" encoding="ISO-8859-1" ?>
 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
 <window title="Ouverture du filemanager"
        xmlns:html="http://www.w3.org/1999/xhtml"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

 <script><![CDATA[
 function openExternal(aFile)
 {
   var uri = Components.classes["@mozilla.org/network/io-service;1"]
                       .getService(Components.interfaces.nsIIOService)
                       .newFileURI(aFile);
   var protocolSvc =
       Components.classes["@mozilla.org/uriloader/external-protocol-service;1"]
                 .getService(Components.interfaces.nsIExternalProtocolService);
   protocolSvc.loadUrl(uri);
   return;
 }

 function filemanager() {
  var fp = Components.classes["@mozilla.org/file/local;1"].
           createInstance(Components.interfaces.nsILocalFile);
  fp.initWithPath(document.getElementById('dir').value);
  try {
    fp.reveal();
  } catch(e) { openExternal(fp); };
 }
 ]]></script>

 <html:h1>Lancement de l'explorateur de fichiers</html:h1>
 <hbox>
  <label value="Répertoire système à ouvrir :" />
  <textbox id="dir" value="~/" />
  <button label="..." oncommand="filemanager()" />
 </hbox>

 </window>

Explications

La fonction filemanager() récupère le contenu du champ de saisie indiquant le répertoire à ouvrir et crée une instance de fichiers via l'interface nsILocalFile.

Dès que cette instance est initialisée avec le bon chemin, le script tente l'ouverture du gestionnaire de fichiers via la méthode reveal(). Cette méthode ne fonctionnant pas sous tous les systèmes, une capture d'erreur via un bloc try {...} catch(e) {...} permet de lancer une seconde fonction.

Ici, cette seconde fonction provient directement httpdu code source de Mozilla. Elle utilise l'appel d'un protocole lié à une uri (ici, celui d'un fichier local).

Nota bene

Le script ne comporte les tests élémentaires à effectuer pour éviter une erreur sur la méthode initWithPath(), et la fonction openExternal() n'a pas été modifiée par rapport au code source.

Dernière modification le mars 5, 2006 7:23 .


Le contenu de cette page est disponible selon certaines conditions de réutilisation. Lire aussi la page des 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.