如何在沙盒iframe(IE11)中使用javascript创建iframe内容?

时间:2014-02-05 20:30:40

标签: javascript html internet-explorer iframe sandbox

我正在尝试通过创建iframe并使用javascript或vbscript动态构建iframe内容来构建一个在Internet Explorer中使用的测试页面。我通常会使用数据:URI,但IE会阻止它。

例子。

<iframe sandbox="allow-scripts" src="javascript:document.write('test')"></iframe>

似乎IE是唯一一个不允许我通过javascript:function()src构建iframe内容的浏览器,即使设置了allow-scripts sandbox属性也是如此。我不是试图在iframe和父窗口之间传递任何信息,并且不希望设置allow-same-origin,因为它几乎会破坏沙盒iframe的目的。

是否还有其他方法可以动态构建除javascript或data之外的iframe内容:src中的URI,或者通过父窗口中的javascript,因为由于相同的原始限制,它不能与沙盒iframe一起使用?我也不想从外部页面设置内容。

2 个答案:

答案 0 :(得分:1)

javascript:是一种奇怪的URI协议。它可以在某些上下文中工作,例如<a href>,但不是全部 - 例如,窗口的位置不能设置为这样的URI。 (虽然您可以将javascript: URI指定为window.location作为运行脚本的真正迂回方式,但窗口的位置不会保持设置为该值。)

要将内容写入IFRAME,请获取对该框架文档的引用并写入该文档。这样做需要您设置allow-same-origin沙盒标志。

<iframe id="myframe" sandbox="allow-scripts allow-same-origin" src="about:blank"></iframe>

var frame = document.getElementById("myframe");
var fdoc = frame.contentDocument;

fdoc.write("Hello world"); // or whatever

实例:http://jsfiddle.net/wUvrF/1/

答案 1 :(得分:1)

HTML5为此目的定义了“srcdoc”属性

<iframe seamless sandbox srcdoc="<p>Yeah, you can see it <a href=&quot;/gallery?mode=cover&amp;amp;page=1&quot;>in my gallery</a>."></iframe>