3 回答

TA貢獻1824條經驗 獲得超6個贊
盡管您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>
但是,iframe具有onload事件。這是一種以DOM(js)形式訪問內部html的方法:
iframe.onload = function() {
var div=iframe.contentWindow.document.getElementById('mydiv');
};

TA貢獻1817條經驗 獲得超14個贊
感謝您提出的重大問題,這使我不知所措。使用dataURI HTML源時,我發現必須定義一個完整的HTML文檔。
參見下面的修改示例。
var html = '<html><head></head><body>Foo</body></html>';
var iframe = document.createElement('iframe');
iframe.src = 'data:text/html;charset=utf-8,' + encodeURI(html);
注意用<html>標簽和iframe.src字符串包裝的html內容。
需要將iframe元素添加到要解析的DOM樹中。
document.body.appendChild(iframe);
iframe.contentDocument除非您disable-web-security在瀏覽器上,否則您將無法檢查。您會收到一條消息
DOMException:無法從“ HTMLIFrameElement”讀取“ contentDocument”屬性:阻止了源為“ http:// localhost:7357 ”的框架訪問跨域框架。
添加回答
舉報