Ressources Libs/Browser Xul Runner

Il peut être utile de développer son propre navigateur sur base XulRunner, comme par exemple un navigateur minimaliste.

?MyBrowser

Vous avez un exemple simple ici : httpmyBrowser

Dézippez le fichier xulapp dans un repertoire. Et lancez xulrunner en indiquant le fichier application.ini livré avec.

Voir une petite déscription du contenu : httphttp://www.ljouanneau.com/blog/2005/04/19/419-xulrunner-en-action

Un navigateur simpliste utilisera donc :

  • une balise <browser>
  • des boutons pour la navigation (back, reload...)
  • une zone de saisie d'url
  • L'implémentation d'un objet de type nsIWebProgressListener, qui permettra d'"écouter" le browser, et donc de réagir en fonction de l'avancement du chargement de la page etc (pour mettre à jour une barre de progression par exemple etc..)

Techniques

Ouvrir un lien dans une nouvelle fenêtre

Par défaut, il ne se passe rien quand on clique sur un lien qui a un target="_blank" (ou plutôt, il y a une erreur). Pour configurer le navigateur pour qu'il ait un comportement classique comme dans firefox pour l'ouverture des liens, vous avez les prefs suivantes (en prenant pour exemple myBrowser que l'on voudrait améliorer) :

 // indication de l'url de la fenêtre qui sert de navigateur
 pref("browser.chromeURL", "chrome://mybrowser/content/mybrowser.xul");

 // indication du lieu où ouvrir un lien de type target blank
 // 0=window par défaut
 // 1=window/tab courante
 // 2=nouvelle window
 // 3=nouvelle tab dans la fenêtre la plus récente (si vous avez des tabs)
 pref("browser.link.open_external", 2);

 // indication du lieu où ouvrir un lien qui ont un target ?
 pref("browser.link.open_newwindow", 2);

 // restriction sur la nouvelle fenetre ouverte
 // 0: aucune
 // 1: don't divert window.open at all
 // 2: don't divert window.open with features
 pref("browser.link.open_newwindow.restriction", 0);

Vous rajouterez ces prefs dans le fichier de préférence de l'application situé dans default/preferences/

Quand gecko ouvre une nouvelle fenêtre de navigateur à partir d'un lien externe, il passe en paramètre l'url de la page à ouvrir. Il faut donc lors du onload de votre fenêtre, vérifier qu'il y a une url en argument, et si oui, la passer au browser pour qu'il l'ouvre. Cela donne quelque chose comme ceci :

 var uriToLoad = null;
 // on test si on a un argument
 if ("arguments" in window && window.arguments.length > 0 && window.arguments[0]){
     try {
        // si la fenêtre est ouverte lors du lancement de l'appli par xulrunner
        // on a un objet nsICommandLine dans arguments.
            nsCommandLine = window.arguments[0]
                            .QueryInterface(Components.interfaces.nsICommandLine);
            if(nsCommandLine.length > 0){
                uriToLoad = nsCommandLine.getArgument(0);
            }
        }catch(e){
            //  il y a eu une erreur, l'argument n'est pas un nsICommandLine
            //  on est alors dans le cas où la fenêtre est ouverte par une autre
            // fenêtre de l'application : arguments est donc un tableau de chaine

            uriToLoad = window.arguments[0];
        }
 }
 // pas d'url indiquée : on ouvre about:blank
 if(uriToLoad == null || uriToLoad == ''){
     uriToLoad = "about:blank";
 }

 // on passe ensuite le uriToLoad au browser...

Dans myBrowser, la fonction onload() devient alors :

 function onload() {

  listener = new ?WebProgressListener();

  var browser = document.getElementById("browser");
  browser.addProgressListener(listener,
      Components.interfaces.nsIWebProgress.NOTIFY_ALL);

  var uriToLoad = null;
  if ("arguments" in window && window.arguments.length > 0 && window.arguments[0]){
     try {
         nsCommandLine = window.arguments[0]
                        .QueryInterface(Components.interfaces.nsICommandLine);
         if(nsCommandLine.length > 0){
             uriToLoad = nsCommandLine.getArgument(0);
         }
     }catch(e){
         uriToLoad = window.arguments[0];
      }
  }
  if(uriToLoad == null || uriToLoad == ''){
      uriToLoad = "about:blank";
  }

  var urlbar = document.getElementById("urlbar");
  urlbar.value = uriToLoad;
  go();
 }

Dernière modification le juin 13, 2006 1:34 .


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.