使用jQuery </script>将<script>插入iframe

时间:2012-07-31 00:49:20

标签: javascript jquery iframe

我正在尝试通过jQuery将代码段插入到iframe中:

var snippet = "<script>document.writeln('test')</script>";

jQuery('<iframe />').appendTo('body').append(snippet);

而不是在iframe中编写“test”,它会覆盖父窗口。

我怎样才能让父窗口获得插入了“test”的iframe?

1 个答案:

答案 0 :(得分:2)

如果您想要控制它们,您应该将新窗口和iframe的来源设置为'about:blank'。然后通过iframe的ID引用它!

您还想使用iframe.contentDocument || iframe.contentWindow.document
在你向它写'()之前'打开()'文件可能是个好主意。

更新:忘了这个:如果你打开窗口:空白,需要时间加载.. 所以你不能马上写信! 因此要么设置超时约50ms(通常),然后写入新窗口/ iframe 或检查它是否已加载(onload),然后让它写入源(我更喜欢这个) 如果您需要重复使用iframe,请将其设置为about:blank first(再次)并等待或再次检查onload,然后再次写入帧。所有这一切都归功于xss安全性 我还强烈建议使用传统的事件模型(因此没有addEvent的东西,它们不能像预期的crossbrowser一样工作并导致IE中的memoryleaks)。

所以:创建iframe并将src设置为about:blank,添加一个onload函数来检查包含你的html-string的var:如果它是空的,否则:将它写入iframe并清空字符串。
要更新iframe:将内容设置为包含html-string的var,然后将iframe的来源设置为about:blank。
了解循环?

这个宝宝甚至可以在IE6中使用......

祝你好运!!

更新:你没有正确地逃避你的代码片段:应该是:<script>document.writeln('test')\<\/script>
请参阅:jsfiddle

UPDATE2:argl ..我通常都不会放弃,但由于我不关心jQuery,我不会通过jQuery手册来获取像jQuery这样简单的东西(对不起)。出于现代(蹩脚)的安全原因,您需要一个:空白。期。

请参阅此updated fiddle了解工作中的“简单jane”基础知识,然后了解如何在jquery中执行此操作并进行选择:onload或setTimeout。我正在使用我自己的crossbrowser html-editor,这个主题需要花费一周的时间来搞清楚。