Embora você src = encodeURI
deva funcionar, eu teria seguido um caminho diferente:
var iframe = document.createElement('iframe');
var html = '<body>Foo</body>';
document.body.appendChild(iframe);
iframe.contentWindow.document.open();
iframe.contentWindow.document.write(html);
iframe.contentWindow.document.close();
Como isso não possui restrições no domínio x e é completamente feito por meio do iframe
identificador, você pode acessar e manipular o conteúdo do quadro posteriormente. Tudo o que você precisa é ter certeza de que o conteúdo foi renderizado, o que (dependendo do tipo do navegador) será iniciado durante / após a emissão do comando .write - mas não será necessário quando close()
for chamado.
Uma maneira 100% compatível de fazer um retorno de chamada pode ser esta abordagem:
<html><body onload="parent.myCallbackFunc(this.window)"></body></html>
O Iframes possui o evento onload, no entanto. Aqui está uma abordagem para acessar o html interno como DOM (js):
iframe.onload = function() {
var div=iframe.contentWindow.document.getElementById('mydiv');
};