Visit Mozilla.org

Extraits de code:Divers

Un article de MDC.

Cette page vient d'être traduite, mais elle a besoin d'un relecteur différent du traducteur. Pensez également à toujours vérifier le contenu avec sa toute dernière version en anglais.


Cette page contient de courts morceaux de code qui se comprennent d'eux-mêmes.

Sommaire

[modifier] Sauvegarde d'une page Web dans un fichier local

Bien que le code suivant ne demande pas à l'utilisateur de choisir un nom de fichier, il vous est possible d'ajouter cette possibilité grâce au composant file picker.

var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("C:\\filename.html");
var wbp = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1']
  .createInstance(Components.interfaces.nsIWebBrowserPersist);
wbp.saveDocument(content.document, file, null, null, null, null);

[modifier] Détection du système d'exploitation

// Renvoie WINNT sur Windows XP, 2000, NT
Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;

Vous pouvez consulter la liste des réponses possibles en utilisant LXR : http://lxr.mozilla.org/mozilla/source/configure.in#910.

[modifier] Détection de l'application hôte et de sa version

var info = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
// Récupère le nom de l'application
info.name; // Renvoie "Firefox" pour Firefox
info.version; // Renvoie "2.0.0.1" pour Firefox version 2.0.0.1

[modifier] Récupération de la version d'une extension comme spécifiée dans son install.rdf


 var em = Components.classes["@mozilla.org/extensions/manager;1"]
                      .getService(Components.interfaces.nsIExtensionManager);

// Remplacez extension-guid@exemple.org par le GUID de l'extension dont vous voulez récupérer la version ;
// par exemple, foxyproxy@eric.h.jung pour FoxyProxy
 var addon = em.getItemForID("extension-guid@exemple.org");
 var version = addon.version;

[modifier] Copie d'un flux d'entrée vers un flux de sortie

// istream et ostream sont respectivement un nsIInputStream et un nsIOutputStream

// le flux de sortie doit être tamponné pour fonctionner.
var bostream = Components.classes["@mozilla.org/network/buffered-output-stream;1"]
                         .createInstance(Components.interfaces.nsIBufferedOutputStream);
bostream.init(ostream, 0x8000);

// créez une pompe de flux et un récepteur de flux pour lire le flux d'entrée
var pump = Components.classes["@mozilla.org/network/input-stream-pump;1"]
                     .createInstance(Components.interfaces.nsIInputStreamPump);
pump.init(istream, -1, -1, 0, 0, true);

/* nous avons besoin de notre propre observateur pour savoir quand fermer le fichier */
var observer = {
  onStartRequest: function(aRequest, aContext) {},
  onStopRequest: function(aRequest, aContext, aStatusCode) {
    bostream.close();
  }
};

// créez un récepteur de flux simple pour écrire sur le flux de sortie
var listener = Components.classes["@mozilla.org/network/simple-stream-listener;1"]
                         .createInstance(Components.interfaces.nsISimpleStreamListener);
listener.init(bostream, observer);

// lancez la copie
pump.asyncRead(listener, null);

[modifier] Redémarrer Firefox / Thunderbird

var nsIAppStartup = Components.interfaces.nsIAppStartup;
Components.classes["@mozilla.org/toolkit/app-startup;1"]
          .getService(nsIAppStartup)
          .quit(nsIAppStartup.eForceQuit | nsIAppStartup.eRestart);

[modifier] Simuler des évènéments clavier ou souris

L'interface nsIDOMWindowUtils contient quelques méthodes utiles pour simuler des évènements clavier et souris.

Nouveau dans Firefox 3 / Gecko 1.9

var req = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
var utils = req.getInterface(Components.interfaces.nsIDOMWindowUtils);
utils.sendMouseEvent("mousedown", 10, 10, 0, 1, 0);
utils.sendMouseEvent("mouseup", 10, 10, 0, 1, 0);

[modifier] La protection du pauvre

Voici un moyen simple de mettre des données relativement peu importantes (comme le mot de passe d'une extension, stocké dans les préférences) à l'abri d'une découverte fortuite. Il peut sembler incompréhensible au premier abord, mais se casse aisément. Pour stocker des mots de passe importants, ce document présente l'utilisation de nsIPasswordManager.

function encrypt(val) {
	num_out = "";
	if(val == ""){
		return "";
	}else {
		str_in = escape(val);
		for(i = 0; i < str_in.length; i++) {
			num_out += str_in.charCodeAt(i) - 23;
		}
		return unescape(num_out);
	}
}

function decrypt(val) {
	str_out = "";
	if(val == ""){
		return "";
	}else {
		num_out = val;  
		for(i = 0; i < num_out.length; i += 2) {
			num_in = parseInt(num_out.substr(i,[2])) + 23;
			num_in = unescape('%' + num_in.toString(16));
			str_out += num_in;
		}
		return str_out;
	}
}

[modifier] Détecter les évènements souris

Lors de l'utilisation de la roulette sur un élément, l'évènement DOMMouseScroll est déclenché. event.detail contient le nombre de lignes à faire défiler. Cet évènement est spécifique à Mozilla ; d'autres navigateurs pourraient supporter window.onmousewheel.

<div id="airedefilement" style="overflow: scroll; height: 6em; width: 10em;">
	Ceci est l'aire de défilement.
	Ceci est l'aire de défilement.
	Ceci est l'aire de défilement.
	Ceci est l'aire de défilement.
	Ceci est l'aire de défilement.
	Ceci est l'aire de défilement.
	Ceci est l'aire de défilement.
	Ceci est l'aire de défilement.
	Ceci est l'aire de défilement.
	Ceci est l'aire de défilement.
	Ceci est l'aire de défilement.
	Ceci est l'aire de défilement.
</div>

<script type="text/javascript">
	var elm = document.getElementById("scrollArea");
	elm.addEventListener("DOMMouseScroll", function scroll(event){
		//event.detail est positif pour un défilement vers le bas, négatif vers le haut
		alert("scrolling " + event.detail + " lines");
	}, false);
</script>

Vous pouvez suivre les clics sur la roulette comme n'importe quel autre évènement clic. Lorsque la roulette de la souris est cliquée, event.button vaut 2.

[modifier] Insérer du texte sous le curseur

function insertText(element, snippet) {
	var selectionEnd = element.selectionStart + snippet.length;
	element.value = element.value.substring(0, element.selectionStart) + snippet +
          element.value.substring(element.selectionEnd, element.value.length);
	element.focus();
	//positionner le curseur après le texte inséré
	element.setSelectionRange(selectionEnd, selectionEnd);
}

insertText(document.getElementById("exemple"), "le texte à insérer");

[modifier] Désactiver JavaScript depuis le code

 // Désactive JS dans l'onglet actif depuis le contexte de browser.xul
 getBrowser().docShell.allowJavascript = false;

Si l'onglet ne vous appartient pas, vous devriez auparavant sauvegarder cette valeur pour la restaurer ensuite. Si vous souhaitez bloquer les scripts suivant leur URI, implémentez nsIContentPolicy.