2011-08-24 64 views
3

您好,StackOverflow社區,Javascript:來自iframe的父級調用函數

我的和JavaScript問題。假設我有一個index.html,並在正文中有iframe。內index.html我有這樣的<head>標籤:

<script type="text/javascript"> 
    function alertTest() { 
     alert("Testing"); 
    } 
</script> 

在iframe的src="iframe.htm"(該位置是相同的域的index.html)。在這一iframe.htm的網頁我有:

<a href="javascript:void(0);" onclick="window.parent.alertTest();">Click here.</a> 

問題是,它沒有加載警報和谷歌瀏覽器返回錯誤:

"Uncaught TypeError: Property 'alertTest' of object [object DOMWindow] is not a function

我已經試過window.parent.alertTest();window.top.alertTest();top.alertTest();parent.alertTest();和近所有在我搜索到的類似問題上出現的問題。

看來你是無法調用位於非iframe的功能,從位於內的iframe說非iframe。

請幫忙!

P.S.從本質上講,在實際最後的結果我想叫燈箱打開的圖像的功能(使用slimbox因爲我可以從JavaScript,而不是從A HREF用它來調用打開的圖像功能)。我也嘗試了使用target =「_ parent」屬性的最終結果。

回答

11

嘗試定義你這樣的功能:

window.alertTest = function() { 
    alert("Testing"); 
}; 

...,把它在你的問題;-)

在瀏覽器中具有相同的方式,一切都在JavaScript是一個孩子的window對象。當你在表單function funcName() { ... }定義一個函數,你實際上定義window對象的私有方法。這在正常情況下並不重要,因爲所有代碼都在window範圍內執行,因此它可以訪問這些私有方法。

但是,當您嘗試從外部訪問window對象(即另一個window對象,即iframe的對象)時,您將無法訪問它。如果你在表單要創建一個特權方法window.funcName = function() { ... };定義功能,即從外部訪問,但也有訪問私有方法和屬性(即在腳本中的變量),所以當你嘗試調用它會工作它來自你的iframe。

,如果你想了解更多有關私營/特權的成員和他們的無障礙Read this

+0

這是爲什麼不接受,最upvoted答案嗎?它的作用像一個魅力,並帶有一個很好的解釋 – KittenCodings

1

寫你的函數是這樣的:

alertTest = function(){ 

    alert("Testing") 

} 

然後從iframe中調用它:

parent.alertTest();