Inventé un complemento de Firefox hace varios meses que falló recientemente. El complemento básicamente busca una URL particular y luego modifica el DOM para la página. Seguí el error hasta la instalación (accidental) del complemento "Búsqueda segura de AVG". Descubrí que, con el complemento AVG deshabilitado, el evento DOMContentLoaded se dispara una vez para el documento (comportamiento que originalmente esperaba), pero con esto habilitado, el evento DOMContentLoaded se dispara dos veces para el documento. Mi complemento inserta una columna en una tabla HTML, por lo que debido a que el evento se dispara dos veces, se insertan dos columnas en vez de una.Evento DOMContentLoaded que se activa dos veces para una sola carga de página
Aquí está el código de inicialización destilada de mi complemento:
var hLoadListener = function(event) { myAddon.initialize(event); }
var hContentLoadedListener = function(event) { myAddon.onContentLoaded(event); }
myAddon.initialize = function(aEvent)
{
gBrowser.addEventListener("DOMContentLoaded", hContentLoadedListener, false);
};
myAddon.onContentLoaded = function(aEvent)
{
if (!(aEvent.originalTarget.nodeName === "#document")) { return; }
var doc = aEvent.target; // document that triggered "onload" event
if (!(doc instanceof HTMLDocument)) { return; }
if (!doc.location) { return; }
var href = doc.location.href; // URL of current page
if (URLRegExp.test(href))
{
// Modify the page's DOM
}
};
window.addEventListener("load", hLoadListener, false);
Este problema parece fácil de solucionar mediante la inserción de un elemento DOM único y luego las pruebas de su existencia en la salida. Mi pregunta es si los desarrolladores complementarios deberían esperar este comportamiento de evento como normal o si este problema es principalmente un error/efecto secundario en el complemento de AVG.
Entonces quiere decir que tenemos que hacer un trabajo extra, como el autor dijo que inserta una identificación única para detener múltiples llamadas? –