Pegando o conteúdo de um iframe

Hoje tive um daqueles problemas[bb] que você pensa, pensa, pensa, e não consegue resolver.

Meu problema era enviar um arquivo via AJAX[bb]. Como isso não é possível, temos que usar uma velha técnica na qual cria-se um iframe e se dá o submit do form para este. Tudo certo. Mas temos que pegar o valor do iframevia javascript para saber se correu tudo bem e o que aconteu.

Fiz alguns testes e nao estava conseguindo pegar o valor do iframe. O motivo? Levei 3 horas para descobrir. Não se consegue pegar o valor se o iframe não estiver no mesmo domínio que a página atual.

Ou seja, nos testes eu estava usando tudo menos o domínio atual. Que serviço.

Para pegar o valor, existem 2 métodos:

1) Mais fácil com a jQuery:

JavaScript:
  1. $('iframe').contents().find('body').html()

2) Um pouco maior, mas apenas javascript:

JavaScript:
  1. var io = document.getElementsByTagName('iframe')[0];
  2. if(io.contentWindow) {
  3. return io.contentWindow.document.body.innerHTML;
  4. } else if(io.contentDocument){
  5. return io.contentDocument.document.body.innerHTML;
  6. }

Mas não esqueçam. Tem que ser do mesmo domínio.

Obrigado ao Israel Cefrin por me dar a dica que tinha que funcionar e me fazer descobrir isso.

4 Comentários

  1. Blog do Isra » Blog Archive » Brincando com Jquery e Iframe escreveu em 10 de dezembro de 2007 as 13:45:

    [...] algo assim, passei o link para o Diesel e ele fez todo o trabalho sujo de descobrir e aplicar a captura do conteúdo de dentro de um iframe. Obviamente que num futuro quando eu precisar, usarei o que ele descobriu dando os devidos [...]

  2. Micox escreveu em 11 de dezembro de 2007 as 07:42:
  3. Vitor Hirota escreveu em 11 de dezembro de 2007 as 11:23:

    essa do domínio é restrição velha :P
    bem no começo da bolha pelo menos era batata ter uma nota sobre isso

    mas enfim…
    o comentário é pra te mostrar isto
    http://ajaxian.com/archives/ajax-cross-domain-script

    abraços

  4. Felipe Diesel escreveu em 14 de dezembro de 2007 as 18:52:

    Sim, mas sabe desde quando não usava iframe em alguma coisa?

    Desde de… desde de… Sei lá, faz tanto tempo…

Deixe seu comentário