2010-06-21 48 views
1

我有一個名爲CoolThing的JS對象,它存在於頂部窗口中。如何在IE7中從iFrame訪問父窗口中JS對象的屬性?

我有一個iFrame,與頂部窗口相同的域,需要訪問CoolThing中的屬性CoolProperty。

在iframe中的JavaScript訪問CoolProperty,這在FF,webkit的完美的作品,和IE8是:

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

在IE7中,我得到的錯誤:this.CoolThing.CoolProperty爲空或不是一個對象。我試着通過遍歷其屬性來檢查CoolThing,但根據IE7沒有。訪問this.CoolThing本身沒有問題。只是它似乎認爲對象是空的。

我試過上面沒有with語句,並試圖直接調用window.parent.CoolThing.CoolProperty,這在所有瀏覽器中都沒有問題,除IE7外,它在其中給出相同的錯誤。

任何提示?

回答

2

這個工作對我來說:

父頁面腳本:

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

兒童網頁腳本:

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

基礎上,進一步閱讀,我會建議不使用(使用)在所有並在子頁面中使用以下內容:

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

不幸的是,我給了一個很簡單的例子,並沒有真正顯示出爲什麼我們使用,並它是獲取'this',我們正在使用它來範圍屬性,以及jquery調用。 事實證明,我可以調用我想要的功能,而不使用(我以爲我已經嘗試過這一點,它不工作,但現在它似乎),所以我只是重寫代碼沒有與塊。讓我們來寫一些該死的優雅代碼,如果它不適合煩人的IE7,那麼我們就可以避開它。 – jmw 2010-06-21 20:08:53

0

實際上,根據an interesting discussion on SOwith關鍵字確實改變了範圍,這就是使用它的一個原因。 IE7可能會有不同的表現。

+0

是的,但只是爲了找到現有成員,而不是爲了宣佈新成員,所以對於改變「範圍」確實是危險的。 – David 2010-06-21 19:45:39

+0

@David:同意。我只是覺得這個討論很有意思,而且有密切關係,所以我把它指向了它。 – Robusto 2010-06-21 19:55:49

+0

感謝您發佈該鏈接,我從中學習到了。 – David 2010-06-21 19:57:31

0

爲什麼不

parent.coolThing.coolWhatever(); 

或者,如果你堅持要用with

with(parent) { 
    coolThing.etCetera(); 
} 
相關問題