Несмотря на то, что вы src = encodeURI
должны работать, я бы пошел другим путем:
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();
Поскольку это не имеет ограничений по x-домену и полностью выполняется через iframe
дескриптор, вы можете получить доступ к содержимому фрейма и манипулировать им позже. Все, что вам нужно, это убедиться, что содержимое было визуализировано, и оно (в зависимости от типа браузера) запустится во время / после того, как будет выполнена команда .write, но не обязательно при close()
вызове.
100% совместимый способ сделать обратный вызов может быть таким подходом:
<html><body onload="parent.myCallbackFunc(this.window)"></body></html>
Однако у Iframes есть событие onload. Вот подход для доступа к внутреннему html как DOM (js):
iframe.onload = function() {
var div=iframe.contentWindow.document.getElementById('mydiv');
};