我正在尝试通过创建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一起使用?我也不想从外部页面设置内容。
答案 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
答案 1 :(得分:1)
HTML5为此目的定义了“srcdoc”属性
<iframe seamless sandbox srcdoc="<p>Yeah, you can see it <a href="/gallery?mode=cover&amp;page=1">in my gallery</a>."></iframe>