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().
<?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>
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 du code source de Mozilla. Elle utilise l'appel d'un protocole lié à une uri (ici, celui d'un fichier local).
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.
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.