为什么在iframe中注入JavaScript会使用父窗口作为其全局范围?

时间:2012-03-16 10:46:53

标签: javascript jquery dom

通过Ajax调用,我得到一个内容的“blob”,我需要在iframe中注入。我无法控制内容......它可能只是HTML或HTML + JavaScript。

作为一个“模板”,我使用一个空的html文件作为我的iframe src。在iframe的“加载”事件后,我将blob推入其体内。它主要工作(使用jQuery):

$iframe.contents().find('body').html(my blob);

注入该系统的JS的“window”对象是父窗口window.top。为什么呢?

我认为这个问题可能与jQuery html()的工作方式有关,但我无法想出一种跨浏览器的方式来使用jQuery进行相同的操作。

感谢任何帮助。

编辑:这是非常小的情况:

<iframe id="z" src="scene.html"></iframe>

<script>

var xxx = 13;

$("#z").load(function() {

  var c = "<scri" + "pt>console.log(xxx)</scr" + "ipt>";

  $(this).contents().find('body').append(c);

})

</script>

在控制台中我们读取“13”(并且我不访问scene.html中已存在的javascript对象)。

1 个答案:

答案 0 :(得分:0)

将此添加到您的scene.html

function myAppendFunc(html) {
    $('body').append(html);
}

然后从外面打电话:

$("#z").load(function() {
    var c = "<scri" + "pt>console.log(xxx)</scr" + "ipt>";
    this.contentWindow.myAppendFunc(c);
})

这应该有效。