¿Cómo puedo convertir una cadena de HTML en un objeto DOM en una extensión de Firefox?

StackOverflow https://stackoverflow.com/questions/3868

  •  08-06-2019
  •  | 
  •  

Pregunta

Estoy descargando una página web (sopa de etiquetas HTML) con XMLHttpRequest y quiero tomar el resultado y convertirlo en un objeto DOM en el que luego pueda ejecutar consultas XPATH.¿Cómo convierto de una cadena a un objeto DOM?

Parece que la solución general es crear un iframe oculto y arrojar el contenido de la cadena en él.Ha habido hablar de actualización Analizador DOMP para soportar texto/html pero a partir de Firefox 3.0.1 todavía obtienes un NS_ERROR_NOT_IMPLEMENTED si intentas.

¿Existe alguna opción además de utilizar el truco del iframe oculto?Y si no, ¿cuál es la mejor manera de hacer el truco del iframe para que su código funcione fuera del contexto de las pestañas actualmente abiertas (para que cerrar pestañas no arruine el código, etc.)?

Este es un ejemplo de por qué estoy buscando una solución distinta al hack de iframe, si tengo que escribir todo ese código para tener una solución sólida, entonces prefiero seguir buscando algo más.

¿Fue útil?

Solución

Ajaxian en realidad tenía un publicación sobre cómo insertar/recuperar html desde un iframe hoy.Probablemente puedas usar el fragmento js que publicaron allí.

En cuanto al manejo del cierre de un navegador/pestaña, puede adjuntarlo al archivo onbeforeunload (http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx) evento y haz lo que tengas que hacer.

Otros consejos

Prueba esto:

var request = new XMLHttpRequest();

request.overrideMimeType( 'text/xml' );
request.onreadystatechange = process;
request.open ( 'GET', url );
request.send( null );

function process() { 
    if ( request.readyState == 4 && request.status == 200 ) {
        var xml = request.responseXML;
    }
}

Observe la anularTipoMime y respuestaXML.
El readyState == 4 esta completado'.

Intenta crear un div

document.createElement( 'div' );

Y luego configure la sopa de etiquetas HTML en el HTML interno del div.El navegador debería procesarlo en XML, que luego podrá analizar.

La propiedad InnerHTML toma una cadena que especifica una combinación válida de texto y elementos.Cuando se establece la propiedad InnerHTML, la cadena dada reemplaza completamente el contenido existente del objeto.Si la cadena contiene etiquetas HTML, la cadena se analiza y se formatea a medida que se coloca en el documento.

Entonces, ¿quieres descargar una página web como un objeto XML usando javascript, pero no quieres usar una página web?Dado que no tiene control sobre lo que hará el usuario (cerrar pestañas o ventanas o lo que sea), deberá hacerlo como un widget de panel de OSX o alguna aplicación separada.Una extensión de Firefox también funcionaría, a menos que tengas que preocuparte de que el usuario cierre el navegador.

¿Existe alguna opción además de utilizar el truco del iframe oculto?

Lamentablemente no, ahora no.De lo contrario, el código de microresumen al que apunta lo utilizaría en su lugar.

Y si no, ¿cuál es la mejor manera de hacer el truco del iframe para que su código funcione fuera del contexto de las pestañas actualmente abiertas (para que cerrar pestañas no arruine el código, etc.)?

El código que citó utiliza la ventana reciente del navegador, por lo que cerrar pestañas no afectará el análisis.Cerrar esa ventana del navegador cancelará la carga, pero puedes solucionarlo (detectar que la carga se cancela y reiniciarla en otra ventana, por ejemplo) y no sucede muy a menudo.

Necesita una ventana DOM para que el iframe funcione correctamente, por lo que no existe una solución clara en este momento (si está interesado en usar el analizador de Mozilla).

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