Problemas con addEventListener


(Gfernandez) #1

Hola todos. Tengo el siguiente problema: Yo estoy creando un extensión en que altero las páginas que visito con navegador (cambiando los colores de fondo y letras usando css, agrandando las páginas, sacando la imágenes de fondo, por ejemplo). La cosa es que addEventListener (uno para “load” y otro para “TabSelect” )no me funciona como quiero y me genera los siguientes problemas:

1.- Cuando abro por tercera veces el navegador, addEventListener deja de funcionar.
2.- Cuando coloco muchas funciones en el addEventListener, esta hace que dos o tres funciones deje de funcionar. Esto me llevo a generar dos addEventListene.

Otro aspecto a considerar, es que guardo las opciones que hacen para modificar la pagina (al usar las preferencias), ya que mis pretensiones es que al abrirse el navegador, quede tal cual como le guste el usuario la página.
Me duda es sabe si addEventListene tiene algún limite o hay que agregar otra cosa más para poder hacerlo funcionar bien?

Bueno espero que me respondan y les dejo parte de código:


/* variables relacionada  con lens.js */
var botton_lens = null;

/* variables relacionada  con plantillas.js */
var ColorBlindness_1 = new Array();
var IDColor_1 = new Array();
var dragoneyes_element =  null;

var container = gBrowser.tabContainer;

window.addEventListener("load", function() { Cargaestilo.init(); });
window.removeEventListener("load", function() { Cargaestilo.init(); });

container.addEventListener("TabSelect", function(){Cargatag.init();});
container.removeEventListener("TabSelect", function() { Cargatag.init(); });

var Cargatag = {
  init: function() {
     
    var appcontent = document.getElementById("appcontent");
    /*funcion relacionada  con plantillas.js */
    dragoneyes_toggleStyleSheet(dragoneyes_element, ColorBlindness_1, IDColor_1);    
     /*funcion relacionada  con lens.js */
   dragoneyes_StyleLupa(botton_lens);
    
   
    if(container)
      container.addEventListener("DOMContentLoaded", Cargatag.onTagLoad);
     
   },

  onTagLoad: function(aEvent) {
    var doc = aEvent.originalTarget; // doc is document that triggered "onload" event
        
    // add event listener for page unload 
    aEvent.originalTarget.defaultView.addEventListener("unload", function(){     Cargatag.onTagUnload(); });
  },

  onTagUnload: function(aEvent) {
    // do something
    
  }
}

var Cargaestilo = {
  init: function() {
   
    var appcontent = document.getElementById("appcontent");   // browser
     dragoneyes_carga_style();
    if(appcontent)
      appcontent.addEventListener("DOMContentLoaded", Cargaestilo.onPageLoad);
   
   },

  onPageLoad: function(aEvent) {
    var doc = aEvent.originalTarget; // doc is document that triggered "onload" event
    // do something with the loaded page.
    // doc.location is a Location object (see below for a link).
    dragoneyes_carga_style();
    
    
    // add event listener for page unload 
    aEvent.originalTarget.defaultView.addEventListener("unload", function(){ Cargaestilo.onPageUnload(); });
  },

  onPageUnload: function(aEvent) {
    // do something
    
  }
}
// le pasan valor de lens.js 
function dragoneyes_lens(element)
{
 botton_lens = element;
}
// le pasan valores de plantillas.js
function dragoneyes_plantillas(element, Color, Id_Color)
{
 dragoneyes_element  = element;
 ColorBlindness_1 = Color;
 IDColor_1 = Id_Color;
}


function dragoneyes_carga_style()
{
 
/* variables relacionada  con plantillas.js */
 ColorBlindness_1 = dragoneyes_getStringPreference("extensions.dragoneyes.stylecolor", false);
 IDColor_1 = dragoneyes_getStringPreference("extensions.dragoneyes.idstylecolor", false);
 dragoneyes_element = document.getElementById(IDColor_1+"-toolbar"); 
 dragoneyes_element.setAttribute("checked", "true");


/* variables relacionada  con lens.js */
 var lens_id = dragoneyes_getStringPreference("extensions.dragoneyes.idlens", false);
 botton_lens = document.getElementById(lens_id+"-toolbar"); 
 botton_lens.setAttribute("checked", "true");

 
 /* funcion relacionada  con plantillas.js */
 dragoneyes_toggleStyleSheet(dragoneyes_element, ColorBlindness_1, IDColor_1);
 
 /* funcion relacionada  con lens.js */
 dragoneyes_StyleLupa(botton_lens); 


}


(Luarmr) #2

Aunque no tengo claro que es lo que te ocurre te contesto que lleva ya unos días esto por aquí.
Que yo sea consciente el addEventListener tenga ninguna limitación de tamaño, al menos una a la que puedas llegar con este código :slight_smile:

Lo que no entiendo es esto:

window.addEventListener(“load”, function() { Cargaestilo.init(); });
window.removeEventListener(“load”, function() { Cargaestilo.init(); });

Por que añades el listener y te lo intentas cargar tan rápido ??? Por otro lado si quieres borrar el listener te recominedo que la función este almacenada en una variable:

var listener = function() { Cargaestilo.init(); };
window.addEventListener(“load”, listener);
window.removeEventListener(“load”, listener);

No tiene por que eliminar el listener ya que la referencia a la función no es la misma.


(Gfernandez) #3

Sabes no pensé que importará si colocaba addEventListener junto a removeEventListener, nu mucho menos que le permitiera cargar rápido, como tu me lo planteas. En fin vale por hacer un acto de presencia en esto. Lo valoro mucho. ¡GRACIAS! :smiley: y probare lo que me dices