Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Comment enfermer un script dans un onglet ?

Envoyé par : Barsy

Date : 27/01/2010 00:48

Bonjour,

J'ai actuellement un petit soucis avec une extension Firefox que je développe. Le but de cette extension est de modifier l'apparence d'un site en y insérant du code. Le problème est qu'à chaque fois qu'on ouvre un nouvel onglet, cela stoppe l'exécution du code dans l'onglet précédent. J'aimerai que le code s'exécute indépendamment dans chaque onglet sans influer sur les autres.

voici la partie du code qui pose problème :

// Démarrage de l'application, on détecte le chargement d'une page
(function()
{
   // Configuration de JQuery
   jQuery.noConflict();
   $ = function(selector, context)
   {
       return new jQuery.fn.init(selector, context || this.doc);
   };
   $.fn = $.prototype = jQuery.fn;
   $.plot = newQuery.plot;

   // Evénements de départ
   var delay = function(aEvent)
   {
       var doc = aEvent.originalTarget;
       debut(doc, aEvent);
   };

   var load = function()
   {
       window.addEventListener("DOMContentLoaded", delay, true);
   };
    
   window.addEventListener("pageshow", load, false);

})();

// début de l'application
function debut(doc, aEvent)
{
   this.win = aEvent.target.defaultView.wrappedJSObject;
   this.doc = doc;

// Suite de mon code ici

}

Je pense que le problème vient des variable "doc" et "$" qui sont resetées à chaque chargement de page (et donc à chaque ouverture d'onglet). Y aurait-il un moyen simple d'enfermer le code d'une extension dans chaque onglet ? Ou alors de repérer chaque onglet afin de lui attribuer un "doc" et un "$" indépendant ?

Merci d'avance,

Barsy

# Re: Comment enfermer un script dans un onglet ?

Envoyé par : Barsy

Date : 28/01/2010 23:22

J'ai trouvé une idée qui fonctionne :

Elle consiste à remplir un tableau avec un élément jquery à chaque fois que je capte un chargement de page. ça donne un truc comme ça :

// Démarrage de l'application, on détecte le chargement d'une page
(function()
{
   // On créé un tableau de jquery pour pouvoir utiliser l'application dans plusieurs onglets
   cptDoc = 0;
   jq = new Array();

   // Evénements de départ
   var delay = function(aEvent)
   {
       if (URLRead.isMonSiteURL(aEvent.originalTarget.location.href.toLowerCase()))
       {
           var doc = aEvent.originalTarget;
           this.doc = doc;

           cptDoc++;

           // Configuration de JQuery
           jQuery.noConflict();
           jq[cptDoc] = function(selector, context)
           {
               return new jQuery.fn.init(selector, context || aEvent.originalTarget);
           };
           jq[cptDoc].fn = jq[cptDoc].prototype = jQuery.fn;
           jq[cptDoc].plot = newQuery.plot;

           debut(cptDoc);
       }
   };

   var load = function()
   {
       window.addEventListener("DOMContentLoaded", delay, true);
   };
   
   window.addEventListener("pageshow", load, false);

})();

Maintenant, le problème est qu'à chaque fois que l'utilisateur va naviguer sur mon site ou cliquer sur un lien, ça va ajouter un nouvel élément dans le tableau et à terme, lui remplir sa mémoire. Il me faut maintenant faire un système de ramasse miette pour éviter ça...

Il n'est plus possible de poster des messages dans ce forum.


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.