Answers:
您可以使用数据URL进行此操作。这将整个文档包含在单个HTML字符串中。例如,以下HTML:
<html><body>foo</body></html>
可以这样编码:
data:text/html;charset=utf-8,%3Chtml%3E%3Cbody%3Efoo%3C/body%3E%3C/html%3E
然后设置为src
iframe 的属性。 实例。
编辑:另一种选择是用Javascript做到这一点。几乎可以肯定,这是我会选择的技术。您无法保证浏览器将接受数据URL多长时间。Javascript技术如下所示:
var iframe = document.getElementById('foo'),
iframedoc = iframe.contentDocument || iframe.contentWindow.document;
iframedoc.body.innerHTML = 'Hello world';
编辑2(2017年12月):使用Html5的srcdoc属性,就像在Saurabh Chandra Patel的答案中一样,现在应该将其作为公认的答案!如果您可以有效地检测IE / Edge,则技巧是仅对它们使用srcdoc-polyfill库,并在所有非IE / Edge浏览器中使用“ pure” srcdoc属性(请确保检查caniuse.com)。
<iframe srcdoc="<html><body>Hello, <b>world</b>.</body></html>"></iframe>
Blocked a frame with origin "http://localhost" from accessing a cross-origin frame
。
innerHTML
浏览器,将不会执行后代脚本标签。有关更多信息,请检查 Element.innerHTML MDN页面的“ 安全注意事项”部分。
使用html5
的新属性srcdoc
(srcdoc-polyfill)Docs
<iframe srcdoc="<html><body>Hello, <b>world</b>.</body></html>"></iframe>
浏览器支持-在以下浏览器中测试:
Microsoft Internet Explorer
6, 7, 8, 9, 10, 11
Microsoft Edge
13, 14
Safari
4, 5.0, 5.1 ,6, 6.2, 7.1, 8, 9.1, 10
Google Chrome
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24.0.1312.5 (beta), 25.0.1364.5 (dev), 55
Opera
11.1, 11.5, 11.6, 12.10, 12.11 (beta) , 42
Mozilla FireFox
3.0, 3.6, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 (beta), 50
根据W3Schools的介绍,HTML 5允许您使用新的“ srcdoc”属性来执行此操作,但是浏览器支持似乎非常有限。