我在顶部窗口中有一个名为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之外,在所有浏览器中执行都没有问题,其中它提供相同的错误。
任何提示?
答案 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 SO,with
关键字确实更改范围,这是使用它的一个原因。 IE7可能表现不同。
答案 2 :(得分:0)
为什么不
parent.coolThing.coolWhatever();
或者如果您坚持使用with
:
with(parent) {
coolThing.etCetera();
}