如何在IE7中从iFrame访问父窗口中JS对象的属性?

时间:2010-06-21 19:24:41

标签: javascript iframe internet-explorer-7

我在顶部窗口中有一个名为CoolThing的JS对象。

我有一个iFrame,与顶部窗口相同的域,需要访问CoolThing中的属性CoolProperty。

iFrame中用于访问CoolProperty的javascript,在FF,webkit和IE8中完美运行,是:

<script type="text/javascript" charset="utf-8">
  with(window.parent) {
    this.CoolThing.CoolProperty.coolFunction();
  }
</script>

在IE7中,我收到错误:this.CoolThing.CoolProperty为null或不是对象。我已经尝试通过迭代它的属性来检查CoolThing,但根据IE7没有。访问this.CoolThing本身没有问题..只是它似乎认为对象是空的。

我在没有with语句的情况下尝试了上述内容,并尝试直接调用window.parent.CoolThing.CoolProperty,再次,除了IE7之外,在所有浏览器中执行都没有问题,其中它提供相同的错误。

任何提示?

3 个答案:

答案 0 :(得分:2)

这对我有用:

父页面脚本:

<script type="text/javascript">
var CoolThing = { CoolProperty:function() { alert("foo alert");} };
</script>

子页面脚本:

<script type="text/javascript">
    with (parent)
    {
        CoolThing.CoolProperty();
    }
</script>

根据进一步阅读,我建议不要使用with(),只需在子页面中使用以下内容:

<script type="text/javascript">
    parent.CoolThing.CoolProperty();
</script>

答案 1 :(得分:0)

实际上,根据an interesting discussion on SOwith关键字确实更改范围,这是使用它的一个原因。 IE7可能表现不同。

答案 2 :(得分:0)

为什么不

parent.coolThing.coolWhatever();

或者如果您坚持使用with

with(parent) {
    coolThing.etCetera();
}