Como posso transformar uma string HTML em um objeto DOM em uma extensão do Firefox?

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

  •  08-06-2019
  •  | 
  •  

Pergunta

Estou baixando uma página da web (sopa de tags HTML) com XMLHttpRequest e quero pegar a saída e transformá-la em um objeto DOM no qual posso executar consultas XPATH.Como faço para converter de uma string em objeto DOM?

Parece que a solução geral é criar um iframe oculto e inserir o conteúdo da string nele.Houve falar de atualização Analisador de DOM para suportar texto/html, mas a partir do Firefox 3.0.1 você ainda recebe um NS_ERROR_NOT_IMPLEMENTED se você tentar.

Existe alguma opção além de usar o truque do iframe oculto?E se não, qual é a melhor maneira de fazer o truque do iframe para que seu código funcione fora do contexto de qualquer guia aberta no momento (para que o fechamento das guias não estrague o código, etc.)?

Esse é um exemplo de por que estou procurando uma solução diferente do hack do iframe, se eu tiver que escrever todos esse código tenha uma solução robusta, então prefiro continuar procurando por outra coisa.

Foi útil?

Solução

Ajaxian realmente tinha um post sobre como inserir/recuperar html de um iframe hoje.Você provavelmente pode usar o trecho js que eles postaram lá.

Quanto ao tratamento do fechamento de um navegador/guia, você pode anexar ao onbeforeunload (http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx) evento e faça o que for necessário.

Outras dicas

Experimente isto:

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 o substituirMimeType e respostaXML.
O readyState == 4 está completo'.

Tente criar uma div

document.createElement( 'div' );

E então defina a tag sopa HTML para o innerHTML do div.O navegador deve processar isso em XML, que você poderá analisar.

A propriedade InnerHTML leva uma string que especifica uma combinação válida de texto e elementos.Quando a propriedade InnerHTML é definida, a sequência fornecida substitui completamente o conteúdo existente do objeto.Se a sequência contiver tags HTML, a sequência será analisada e formatada à medida que é colocada no documento.

Então você deseja baixar uma página da web como um objeto XML usando javascript, mas não quer usar uma página da web?Como você não tem controle sobre o que o usuário fará (fechar guias ou janelas ou outros enfeites), você precisará fazer isso como um widget do OSX Dashboard ou algum aplicativo separado.Uma extensão do Firefox também funcionaria, a menos que você precise se preocupar com o fechamento do navegador pelo usuário.

Existe alguma opção além de usar o truque do iframe oculto?

Infelizmente, não, agora não.Caso contrário, o código de microresumo para o qual você aponta o usaria.

E se não, qual é a melhor maneira de fazer o truque do iframe para que seu código funcione fora do contexto de qualquer guia aberta no momento (para que o fechamento das guias não estrague o código, etc.)?

O código que você citou usa a janela recente do navegador, portanto, fechar as guias não afetará a análise.Fechar a janela do navegador abortará o carregamento, mas você pode lidar com isso (detectar que o carregamento foi abortado e reiniciá-lo em outra janela, por exemplo) e isso não acontece com muita frequência.

Você precisa de uma janela DOM para que o iframe funcione corretamente, portanto não há uma solução limpa no momento (se você estiver interessado em usar o analisador Mozilla).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top