javascript - 使用 jQuery 将 <script> 插入 iframe

标签 javascript jquery iframe

我正在尝试使用以下内容通过 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 将 &lt;script&gt; 插入 iframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11731677/

相关文章:

javascript - clearInterval - 出了点问题

javascript - 为 colModel edittype 扩展 jqgrid

html - IFrame:无法在框架中显示此内容;添加标题后错误仍然出现

javascript - 默认选择前置选项

javascript - 使用这种 JavaScript 编码模式来定义构造函数有什么好处?

javascript - 当前幻灯片// super 幻灯片时视频开始

iframe - 从 Chrome 内容脚本扩展访问 iframe

javascript - React - 控制台警告和错误

php - Wordpress ajax 返回带有 php 开始标记的 JSON

javascript - 创建一个加载与放置位置相同的页面的 iframe - IframeLoop