动态加载到 iframe 的 JavaScript 在父范围内运行

标签 javascript jquery html iframe

我有一个 iframe,我使用以下代码将一些 html+javascript 动态加载到其中:

var allMyCode = "<div id='test'>html code</div> <script type='text/javascript'>alert(document.getElementById('test').innerHTML);<\/script>";
$("#myFrame").contents().find("body").html(allMyCode);

问题是我想提醒文本“html代码”,但它实际上在父级的div中获取了id为“test”的html,所以它没有引用自己。我在这个 fiddle 中展示了这个:http://jsfiddle.net/BNG4n/

为什么要这样做,我怎样才能让 JavaScript 在它自己的范围内运行!?

最佳答案

因为 jQuery 在设置 iframe 的 body 元素的 html 之前执行脚本元素,它总是在父范围内。

您可以尝试创建一个脚本元素并将其附加到 iframe 的正文中,它将按预期工作。

像这样。

var allMyCode = "<div id='test'>html code</div>";
$("#myFrame").contents().find("body").html(allMyCode);
var el = document.createElement("script");
el.setAttribute("type","text/javascript");
el.innerHTML = "alert(document.getElementById('test').innerHTML);";
$("#myFrame").contents().find("body")[0].appendChild(el);

工作演示 - http://jsfiddle.net/BNG4n/1/

关于动态加载到 iframe 的 JavaScript 在父范围内运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10401260/

相关文章:

javascript - 在 nodejs 和 express 中使用 fluent-ffmpeg 下载视频

javascript - 用于 cookie 访问的最可靠的 JavaScript 函数是什么?

javascript - 遵循图像 HTTP 请求的重定向,客户端

jquery - 恢复“选择的选择”中预先选择的值

css - 如何创建 DIV "rows"而旁边有一个 DIV float ?

javascript - 在 CSS 和 Vue 中将非事件缩略图显示为灰色

jquery - 水平溢出导航使元素可见

javascript - 圆形图像边框而不是正方形

javascript - Three.js计算几何人脸面积(Face3)

jQuery replaceWith() 在使用 indexOf() 时无法正常工作