2014-02-05 83 views
5

我正在尝试通过创建一个iframe并使用javascript或vbscript动态构建iframe内容来构建在Internet Explorer中使用的测试页。我通常会使用data:URI,但是IE会阻止它。如何在沙盒iframe(IE11)中使用JavaScript创建iframe内容?

示例。

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

似乎IE是不会允许我通过一个javascript打造的iframe内容唯一的浏览器:()函数的src,即使允许的脚本沙箱属性设置。我不想在iframe和父窗口之间传递任何信息,也不想让allow-same-origin集合,因为它几乎无法达到拥有沙盒iframe的目的。

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

+0

可能重复( http://stackoverflow.com/questions/16906859/cant-write-to-iframe-in-ff-or-ie-only-chrome) –

回答

0

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/

+2

javascript:可以用作所有iFrame的src属性中的URI只要未设置sandbox属性或设置为allow-scripts,但IE中只允许使用IE或允许使用同一源码。看起来,这是一个问题,因为沙盒iframe是一个独特的域,它将使我无法通过父文档上的脚本对其进行修改。将iFrame设置为允许在沙箱属性中使用相同的来源,这就会破坏iFrame的沙箱目标,因此它不是我尝试测试的可行选项。 – user3276899

+0

您可以在某处选择某个选项,以允许您从Chrome/Safari中的地址栏运行JavaScript网址。 – bjb568

+0

这是沙箱吗? – bumpkin

0

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> 
的[无法写入在FF或IE,只有铬设置为iFrame]
+1

Internet Explorer不支持srcdoc属性,因此不适用于我正在尝试执行的操作。虽然它在支持它的其他浏览器中很有用,但我已经有方法使用src属性中的数据或javascript URI来动态创建iframe源代码。不幸的是我需要一些在IE中可用的东西。 – user3276899