Javascript 如何从IE7中的iFrame访问父窗口中JS对象的属性?
我有一个名为CoolThing的JS对象,它存在于顶部窗口中 我有一个iFrame,与顶部窗口相同的域,需要访问CoolThing中的属性CoolProperty iFrame中访问CoolProperty的javascript在FF、webkit和IE8中运行良好,它是:Javascript 如何从IE7中的iFrame访问父窗口中JS对象的属性?,javascript,iframe,internet-explorer-7,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.co
<script type="text/javascript" charset="utf-8">
with(window.parent) {
this.CoolThing.CoolProperty.coolFunction();
}
</script>
使用(window.parent){
this.CoolThing.CoolProperty.coolFunction();
}
在IE7中,我得到错误:this.CoolThing.CoolProperty
为null或不是对象。我试着通过遍历CoolThing的属性来检查它,但根据IE7没有。它访问这个.CoolThing本身没有问题。。只是它似乎认为这个物体是空的
我在没有使用with
语句的情况下尝试了上述操作,并尝试直接调用window.parent.CoolThing.CoolProperty,这在除IE7之外的所有浏览器中执行都没有问题,IE7会给出相同的错误
有什么建议吗?这对我很有用:
父页面脚本:
<script type="text/javascript">
var CoolThing = { CoolProperty:function() { alert("foo alert");} };
</script>
<script type="text/javascript">
with (parent)
{
CoolThing.CoolProperty();
}
</script>
var CoolThing={CoolProperty:function(){alert(“foo alert”);};
子页面脚本:
<script type="text/javascript">
var CoolThing = { CoolProperty:function() { alert("foo alert");} };
</script>
<script type="text/javascript">
with (parent)
{
CoolThing.CoolProperty();
}
</script>
与(家长)
{
CoolThing.CoolProperty();
}
根据进一步阅读,我建议根本不要使用with(),只在子页面中使用以下内容:
<script type="text/javascript">
parent.CoolThing.CoolProperty();
</script>
parent.CoolThing.CoolProperty();
事实上,根据,关键字带的确实改变了范围,这也是使用它的原因之一。IE7可能会有不同的表现。为什么不
parent.coolThing.coolWhatever();
或者如果您坚持将与
一起使用:
with(parent) {
coolThing.etCetera();
}
是的,但只用于查找现有成员,而不是声明新成员,因此更改“范围”确实很危险。@David:同意。我只是觉得讨论很有趣,也很密切,所以我加入了指向它的指针。不幸的是,我给出了一个非常简单的示例,它并没有真正说明我们使用的原因,而是为了得到“this”,我们使用它来定义属性以及jquery调用。事实证明,我能够在不使用with的情况下调用我想要的函数(我原以为我已经尝试过了,但它不起作用,但现在似乎起作用了),所以我只是在不使用with块的情况下重写代码。FWIW,“with”让我们写一些他妈的优雅的代码,如果不是讨厌的IE7,我们本可以侥幸逃脱。