Pregunta

Tengo algún código para Firefox que se ejecuta para verificar si existe un elemento en la página con un determinado manejador de eventos, en este caso OnClick. Desde que salió FF4, he estado obteniendo ns_error_not_available y supongo que tiene que ver con el xpcnative wrapper alrededor de los elementos. Aquí está el código que uso:


var elem = null;
var elems = doc.getElementsByTagName('td');
var firefoxWindow = window;
for (a = 0; a < elems.length; a++) {
    if (((elems[a] != null && elems[a].hasAttributes() == true && elems[a].getAttribute('onclick') != null && elems[a].getAttribute('onclick').toString().match(/Goodbye Wonderful/gim) != null && elems[a].getAttribute('onclick').toString().match(/Goodbye Wonderful/gim).length >= 0) || (elems[a] != null && elems[a].onclick != null && elems[a].onclick.toString().match(/Goodbye Wonderful/gim) != null && elems[a].onclick.toString().match(/Goodbye Wonderful/gim).length >= 0))) elem = elems[a];
}
var found = false;
var window = null;
for (var i = 0; i < firefoxWindow.frames.length; i++) {
    if (firefoxWindow.frames[i].toString().toLowerCase().indexOf('object window') > -1) {
        window = firefoxWindow.frames[i];
        break;
    }
}

función recursiveSearch (frames) {for (var i = 0; i <frames.length; i ++) {var elems = frames [i] .document.getElementsByTagName ('td'); para (a = 0; a <elems.length; a ++) {if (((elems [a]! = null && elems [a] .hasattributes () == true && elems [a] .getAttribute ('onClick') ! = null && elems [a] .getAttribute ('onClick'). toString (). Match (/Goodbye Wonderful/Gim)! = NULL && Elems [a] .getAttribute ('onClick'). toString (). Match (Match ( /Goodbye maravilloso/gim) .length> = 0) || (elems [a]! = Null && elems [a] .onclick! = Null && elems [a] .onClick.ToString (). Match (/Goodbye maravilloso/ gim)! = null && elems [a] .Onclick.ToString (). Match (/Goodbye Wonderful/Gim) .length> = 0))) Elem = Elems [a]; } if (elem) {encontrado = true; devolver; } else {if (frames [i] .frames.length> 0) {recursivearch (frames [i] .frames); }}}} if (! Elem && window.frames.length> 0) {recursiveSearch (window.frames); } if (elem! = null) {print ('## resultado ##' + elem.tagname); } else {print ('fallido');

Pido disculpas por la larga línea en el medio, pero hace bien en asegurarse de que no haya referencias nulas. No he podido encontrar nada en los cambios realizados a los eventos, ya que esto funciona bien en FF 3.6. He descubierto que asignar eventos es diferente, pero no se menciona las propiedades de lectura del evento.

¿Fue útil?

Solución

Resulta que el contexto en el que se estaba ejecutando JavaScript era incorrecto y se estaba ejecutando en FirefoxWindow (por lo que no podía acceder a los controladores de eventos) en lugar de ejecutarse en el documento de la ventana.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top