FAQ XULConsultez toutes les FAQ

Nombre d'auteurs : 2, nombre de questions : 23, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireXUL et XPCom

Pour pouvoir utiliser un objet XPCom dans l'une de vos pages, il faut déjà être en mode chrome (pour les extensions). Ensuite, il faut ajouter cette ligne en début de script.

 
Sélectionnez

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

Par ailleurs, il vous faut connaitre le Contract ID du composant, et l'interface avec laquelle vous souhaitez l'utilisez. Avec ces informations, vous pouvez souvent l'instancier ainsi :

 
Sélectionnez

var mon_composant = Components.classes[Contract_ID].createInstance(Interface_souhaitee);
Créé le 14 mai 2008  par Nicolas Vallee

Si vous récupérer des informations dans un site qui ne possède pas le même encodage que votre extension, il peut être utile de convertir le résultat.

 
Sélectionnez

function convertToUTF8(str)
{
        var encoder = Components.classes["@mozilla.org/intl/utf8converterservice;1"]
            .createInstance(Components.interfaces.nsIUTF8ConverterService);
 
        return encoder.convertStringToUTF8(str,"ISO-8859-1",true);
}
Créé le 14 mai 2008  par Nicolas Vallee

Voici un exemple qui vous permettra de stocker un noeud XML dans une chaine de caractères.

 
Sélectionnez

function serialize_XML(node)
{
        var serializer = Components.classes["@mozilla.org/xmlextras/xmlserializer;1"]
            .createInstance(Components.interfaces.nsIDOMSerializer);
 
        return serializer.serializeToString(node);
}
Créé le 14 mai 2008  par Nicolas Vallee

Voici un exemple qui vous permettra de parser une chaine de caractères dans un noeud XML.

 
Sélectionnez

function parse_text(str)
{
        var domParser = Components.classes["@mozilla.org/xmlextras/domparser;1"]
            .getService(Components.interfaces.nsIDOMParser);
 
        return domParser.parseFromString(str,"text/xml");
}
Créé le 14 mai 2008  par Nicolas Vallee

Pour enregistrer des préférences pour une prochaine utilisation, il peut être utile de connaître l'emplacement du répertoire personnel de l'utilisateur courant.

 
Sélectionnez

function home_dir() {
    var dirService = Components.classes["@mozilla.org/file/directory_service;1"]
   			 .getService( Components.interfaces.nsIProperties);
 
    var home = dirService.get("Home", Components.interfaces.nsIFile)
		    .QueryInterface(Components.interfaces.nsILocalFile)
		    .path;
 
    return home;
}
Créé le 14 mai 2008  par Nicolas Vallee

Voici un exemple qui vous permettra de tester la présence d'un fichier local.

 
Sélectionnez

function exist_file(filepath)
{
        var aFile = Components.classes["@mozilla.org/file/local;1"]
                .createInstance(Components.interfaces.nsILocalFile);
        aFile.initWithPath(filepath);
 
        return aFile.exists();
}
Créé le 14 mai 2008  par Nicolas Vallee

Voici un exemple qui vous permettra de lire un fichier local, et de récupérer son contenu ligne par ligne dans un tableau.

 
Sélectionnez

function read_file(filepath) {
        var aFile = Components.classes["@mozilla.org/file/local;1"]
                .createInstance(Components.interfaces.nsILocalFile);
        aFile.initWithPath(filepath);
 
        if (aFile.exists()) {
                var aStream = Components.classes["@mozilla.org/network/file-input-stream;1"]
                        .createInstance(Components.interfaces.nsIFileInputStream);
                aStream.init(aFile, 0x01, 0444, null);
                aStream.QueryInterface(Components.interfaces.nsILineInputStream);
                var hasmore = true;
                var tab = new Array(), i=0;
                while (hasmore) {
			var line = {};
                        hasmore = aStream.readLine(line);
                        tab[i] = line.value;
                        i++;
                }
                aStream.close();
                return tab;
        }
}
Créé le 14 mai 2008  par Nicolas Vallee

Voici un exemple qui vous permettra d'écrire une ligne dans un fichier local.

 
Sélectionnez

function write_file(filepath, str) 
{
        var aFile = Components.classes["@mozilla.org/file/local;1"]
                .createInstance(Components.interfaces.nsILocalFile);
        aFile.initWithPath(filepath);
 
        var aStream = Components.classes['@mozilla.org/network/file-output-stream;1']
                .createInstance(Components.interfaces.nsIFileOutputStream);
        aStream.init(aFile, 0x02 | 0x08 | 0x20, 0777, null);
        aStream.write(str, str.length);
        aStream.close();
}
Créé le 14 mai 2008  par Nicolas Vallee

Voici un exemple qui vous permettra de lire un fichier local, et de récupérer son contenu dans un noeud XML.

 
Sélectionnez

function parse_file(filepath,encoding)
{
        var aFile = Components.classes["@mozilla.org/file/local;1"]
                .createInstance(Components.interfaces.nsILocalFile);
        aFile.initWithPath(filepath);
 
        if (aFile.exists()) {
                var aStream = Components.classes["@mozilla.org/network/file-input-stream;1"]
                        .createInstance(Components.interfaces.nsIFileInputStream);
                aStream.init(aFile, 0x01, 0444, null);
 
                var domParser = Components.classes["@mozilla.org/xmlextras/domparser;1"]
                    .getService(Components.interfaces.nsIDOMParser);
                var root = domParser.parseFromStream(aStream,encoding,aFile.fileSize,"text/xml");
 
                aStream.close();
                return root;
        }
}
Créé le 14 mai 2008  par Nicolas Vallee

Voici un exemple qui vous permettra de stocker un noeud XML dans un fichier local.

 
Sélectionnez

function write_fileXML(filepath, node) 
{
        var aFile = Components.classes["@mozilla.org/file/local;1"]
                .createInstance(Components.interfaces.nsILocalFile);
        aFile.initWithPath(filepath);
        var aStream = Components.classes['@mozilla.org/network/file-output-stream;1']
                .createInstance(Components.interfaces.nsIFileOutputStream);
        aStream.init(aFile, 0x02 | 0x08 | 0x20, 0777, null);
 
        var tmp = Components.classes["@mozilla.org/xmlextras/xmlserializer;1"]
            .createInstance(Components.interfaces.nsIDOMSerializer);
        tmp.serializeToStream(node,aStream,"iso-8859-1");
 
        aStream.close();
}
Créé le 14 mai 2008  par Nicolas Vallee

Voici un exemple qui vous permettra de récupérer des informations stockées dans un cookie.

 
Sélectionnez

function get_cookies_from_host(hostname,name)
{
        var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"]
            .getService(Components.interfaces.nsICookieManager);
 
        var iter = cookieManager.enumerator;
        while (iter.hasMoreElements())
        {
                var cookie = iter.getNext();
                if (cookie instanceof Components.interfaces.nsICookie)
                {
                        if (cookie.host == hostname)
                        {
                                if (cookie.name == name)
                                {
                                        return cookie.value;
                                }
                        }
                }
        }
}
Créé le 14 mai 2008  par Nicolas Vallee

Pour effectuer cette opération, il vous suffit d'utiliser le gestionnaire de cookies intégré à XpCom dans son interface non figée nsICookieManager2

Voici la méthode intéressante :

 
Sélectionnez

 /* Add a cookie. nsICookieService is the normal way to do this. This
  * method is something of a backdoor.
  *
  * @param aDomain
  *        the host or domain for which the cookie is set. presence of a
  *        leading dot indicates a domain cookie; otherwise, the cookie
  *        is treated as a non-domain cookie. see RFC2109.
  * @param aPath
  *        path within the domain for which the cookie is valid
  * @param aName
  *        cookie name
  * @param aValue
  *        cookie data
  * @param aIsSecure
  *        true if the cookie should only be sent over a secure connection.
  * @param aIsHttpOnly
  *        true if the cookie should only be sent to, and can only be
  *        modified by, an http connection.
  * @param aIsSession
  *        true if the cookie should exist for the current session only.
  *        see aExpiry.
  * @param aExpiry
  *        expiration date, in seconds since midnight (00:00:00), January 1,
  *        1970 UTC. note that expiry time will also be honored for session cookies;
  *        in this way, the more restrictive of the two will take effect.
  */
 
void add(in AUTF8String aDomain,
             in AUTF8String aPath,
             in ACString    aName,
             in ACString    aValue,
             in boolean     aIsSecure,
             in boolean     aIsHttpOnly,
             in boolean     aIsSession,
             in PRInt64     aExpiry);
 
Mis à jour le 12 mai 2009  par Nicolas Vallee

Pensez bien à signaler les chemins absolus de la commande que vous souhaitez lancer, et des éventuels noms de fichiers que vous allez passer en arguments. Par ailleurs, les arguments sont contenus dans un tableau...

 
Sélectionnez

function process(execpath,args) {
  //Creation d'un objet nsILocalFile pour l'application
  var file = Components.classes["@mozilla.org/file/local;1"]
             .createInstance(Components.interfaces.nsILocalFile);
  file.initWithPath(execpath);
 
  //Creation du processus
  var process = Components.classes["@mozilla.org/process/util;1"]
                .createInstance(Components.interfaces.nsIProcess);
  process.init(file);
 
  //Execution du processus
  //Si le premier parametre est true, le script sera bloqué jusqu'a la fin du processus
  //Les seconds et troisiemes parametres sont les arguments transmis a l'application
  //(Le troisieme etant le nombre d'arguments). 
  process.run(false, args, args.length);
}
Créé le 14 mai 2008  par Nicolas Vallee

Si vous souhaitez débugger plus facilement, il est possible de loguer des informations via la console d'erreurs.

 
Sélectionnez

function logMessage(aMessage) {
    var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
    consoleService.logStringMessage(aMessage);
}
Créé le 14 mai 2008  par Denis Cabasson
Ce document est sous licence Creative Commons - Paternité 2.5 Générique