Como posso transformar uma seqüência de HTML em um objeto DOM em uma extensão do Firefox?

votos
19

Estou download de uma página web (tag sopa HTML) com XMLHttpRequest e eu quero tomar a saída e transformá-lo em um objeto DOM que eu possa, em seguida, executar consultas XPATH diante. Como faço para converter de uma string em objeto DOM?

Parece que a solução geral é criar um iframe escondido e jogar o conteúdo da string em que. Houve conversa de atualizar DOMParser para apoiar text / html, mas a partir de Firefox 3.0.1 você ainda obter um NS_ERROR_NOT_IMPLEMENTEDse você tentar.

Existe alguma opção além de usar o truque iframe oculto? E se não, qual é a melhor maneira de fazer o truque iframe para que seu código funciona fora do contexto de quaisquer separadores abertos no momento (de modo que as abas de fechamento não estrague seu código, etc)?

Este é um exemplo de por que eu estou procurando uma solução que não seja o hack iframe, se eu tenho que escrever tudo que o código para ter uma solução robusta, então eu prefiro manter a procura de outra coisa.

Publicado 06/08/2008 em 20:08
fonte usuário
Em outras línguas...                            


5 respostas

votos
7

Ajaxian realmente tinha um post em inserir / recuperar html de um iframe hoje. Provavelmente, você pode usar o js trecho que eles colocaram lá.

Como para lidar com fechamento de um navegador / guia, você pode anexar ao onbeforeunload ( http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx evento) e fazer tudo o que você precisa fazer .

Respondeu 06/08/2008 em 21:37
fonte usuário

votos
4

Tente 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 a overrideMimeType e responseXML .
A readyState == 4é 'concluído'.

Respondeu 06/08/2008 em 20:13
fonte usuário

votos
1

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

Infelizmente, não, não agora. Caso contrário, o código microsummary você apontar para o usaria em seu lugar.

E se não, qual é a melhor maneira de fazer o truque iframe para que seu código funciona fora do contexto de quaisquer separadores abertos no momento (de modo que as abas de fechamento não estrague seu código, etc)?

O código que você citou usa a janela do navegador recente, de modo abas de fechamento não afetará a análise. Fechando que a janela do navegador irá abortar a sua carga, mas você pode lidar com isso (detectar que a carga é abortada e reiniciá-lo em outra janela, por exemplo) e isso não acontece muito frequentemente.

Você precisa de uma janela DOM para o iframe para funcionar corretamente, então não há nenhuma solução limpa no momento (se você estiver interessado em usar o analisador mozilla).

Respondeu 12/08/2008 em 19:56
fonte usuário

votos
1

Então você deseja fazer o download de uma página web como um objeto XML usando javascript, mas você não quiser usar uma página web? Desde que você não tem controle sobre o que o usuário vai fazer (fechar abas ou janelas ou outros enfeites) você precisaria de fazer isso no como um widget do Dashboard OSX ou algum aplicativo separado. A extensão do Firefox também funcionaria, a menos que você precisa se preocupar com o usuário fechar o browser.

Respondeu 06/08/2008 em 21:22
fonte usuário

votos
1

Tente criar um div

document.createElement( 'div' );

E defina o HTML tag sopa para o innerHTML da div. O navegador deve processar isso em XML, que, em seguida, você pode analisar.

A propriedade innerHTML recebe uma string que especifica uma combinação válida de texto e elementos. Quando a propriedade innerHTML é definido, a string dada substitui completamente o conteúdo existente do objeto. Se a string contém tags HTML, a string é analisado e formatado como ele é colocado no documento.

Respondeu 06/08/2008 em 20:59
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more