Pegando o conteúdo de um iframe
Hoje tive um daqueles problemas que você pensa, pensa, pensa, e não consegue resolver.
Meu problema era enviar um arquivo via AJAX. 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:
-
$('iframe').contents().find('body').html()
2) Um pouco maior, mas apenas javascript:
-
var io = document.getElementsByTagName('iframe')[0];
-
if(io.contentWindow) {
-
return io.contentWindow.document.body.innerHTML;
-
} else if(io.contentDocument){
-
return io.contentDocument.document.body.innerHTML;
-
}
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.
[...] 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 [...]
heheh, eu tinha falado sobre isso aqui: http://elmicox.blogspot.com/2007/03/upload-assncrono-iframe-como-ajax- 1.html
té.
essa do domínio é restrição velha
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
Sim, mas sabe desde quando não usava iframe em alguma coisa?
Desde de… desde de… Sei lá, faz tanto tempo…