【问题标题】:Inserting <script> into iframe with jQuery使用 jQuery 将 <script> 插入 iframe
【发布时间】:2012-07-31 00:49:19
【问题描述】:

我正在尝试通过 jQuery 将 sn-p 插入到 iframe 中:

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

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

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

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

【问题讨论】:

标签: javascript jquery iframe


【解决方案1】:

如果您想控制它们,您应该将新窗口和 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:将内容设置为包含 html 字符串的 var,然后将 iframe 的源设置为 about:blank。
了解循环?

这个宝贝竟然在IE6下也能用...

祝你好运!

更新:您没有正确转义您的 sn-p:应该是:&lt;script&gt;document.writeln('test')\&lt;\/script&gt;
见:jsfiddle

UPDATE2: argl.. 我通常从不放弃,但因为我不关心 jQuery,所以我不会通过 jQuery 手册来了解一些像 jQuery 一样简单的东西(对不起)。出于现代(糟糕的)安全原因,您需要一个 about:blank。时期。

查看updated fiddle 了解工作中的“plain jane”基础知识,然后查看如何在 jquery 中进行操作并做出选择:onload 或 setTimeout。我正在开发自己的跨浏览器 html 编辑器,这个主题花了一个多星期才弄清楚。

【讨论】:

  • 感谢您的提示,但这并没有解决问题。在一项测试中,我使用 about:blank 在页面上放置了一些静态 iframe,并通过 Web 检查器控制台执行了示例中的第二行(注入
  • 原来打开/写入/关闭可能是关键——让我仔细检查一下;)
  • 对我的回答进行了大量更新。应该包含您需要知道的所有内容(如果您仍想使用 jquery,则转换为 jquery..)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
相关资源
最近更新 更多