我正在尝试使用以下内容通过 jQuery 将代码片段插入到 iframe 中:
var snippet = "<script>document.writeln('test')</script>";
jQuery('<iframe />').appendTo('body').append(snippet);
它不是在 iframe 中写入“test”,而是覆盖父窗口。
如何才能让父窗口获得插入了“test”的 iframe?
最佳答案
如果您想控制新窗口和 iframe,则应将其源设置为“about:blank”。然后通过 iframe 的 ID 引用它!
您还想使用iframe.contentDocument || iframe.contentWindow.document
在对文档进行“write()”操作之前,最好先“open()”该文档。
更新:忘记了这一点:如果您打开有关:空白的窗口,则需要时间加载..
所以你不能立即写信给它!
因此,要么设置大约 50 毫秒的超时(通常),然后写入新的窗口/iframe。
或者检查它是否已加载(onload),然后让它写入源代码(我更喜欢这个)。
如果您需要重用 iframe,请首先(再次)将其设置为 about:blank,然后等待或再次检查 onload,然后再次写入框架。这一切都归功于xss安全。
我还强烈建议使用传统的事件模型(所以没有 addEvent 的东西,它们不能按预期的跨浏览器工作,并导致 IE 中的内存泄漏)。
因此:创建 iframe 并将 src 设置为 about:blank,添加一个 onload 函数来检查包含 html 字符串的 var:如果它为空,否则:将其写入 iframe 并清空字符串。
要更新 iframe:将 content 设置为包含 html 字符串的 var,然后将 iframe 的源设置为 about:blank。
了解循环吗?
这个宝贝甚至可以在 IE6 下运行...
祝你好运!!
更新:您没有正确转义您的代码片段:应该是:<script>document.writeln('test')\<\/script>
请参阅:jsfiddle
UPDATE2: argl.. 我通常不会放弃,但由于我不关心 jQuery,所以我不会通过 jQuery 手册来了解像 jQuery 这样简单的事情(抱歉)。出于现代(糟糕的)安全原因,您需要一个 about:blank。时期。
查看此updated fiddle对于工作中的“plain jane”基础知识,然后了解如何在 jquery 中执行此操作并做出选择:onload 或 setTimeout。我正在开发自己的跨浏览器 html 编辑器,这个主题花了一周多的时间才弄清楚。
关于javascript - 使用 jQuery 将 <script> 插入 iframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11731677/