2011-07-01 74 views
0

我無法弄清楚我在這裏做錯了什麼。從父窗口調用iframe中的函數

我正在構建一個沒有服務器端的網站 我有一個帶有iframe的主頁面和一個按鈕點擊我希望iframe的src被更改,並且使用傳遞的參數調用它的一個函數。

該功能因某種原因未被調用。

這裏是我的代碼:

的iframe:

<iframe id="main_area_frame" name="main_area_frame" src="" frameborder="0" width="100%"  height="100%"></iframe> 

的onclick功能:

function onSubMenuClick(images) 
{ 
    //Set Images Frame 
    main_area = document.getElementById("main_area_frame"); 
    main_area.src = "ImagesFrame.html"; 
    main_area.contentWindow.initializeImages(images); 
} 

在iframe的功能(ImagesFrame.html):

function initializeImages(imagesStr) 
{ 
    alert("initializeImages"); 
    ... 
} 

一些奇怪的事情我注意到,

當在main_area.contentWindow.initializeImages(圖像)之前添加警報時; 該功能以某種方式稱爲成功。

如果我從開始設置iframe的src並跳過main_area.src =「ImagesFrame.html」; - 該功能再次被稱爲。

有什麼想法?

回答

0

不知道如果是這樣的原因,但我會嘗試把爲了

main_area.src = "ImagesFrame.html"; 

main_area.contentWindow.initializeImages(images); 

之間的延遲(睡眠),讓iframe來呈現(我做不知道它是由同一幀渲染還是瀏覽器啓動一個新幀)。

只是我的兩分錢。

+4

你是正確的iframe是負載異步,這就是問題的原因。但是,我認爲他們應該監聽iframe上的onload事件,以及何時該事件已經觸發,然後操作iframe的內容是安全的。 – jfriend00

+0

當然jfriend00方法比我的更強大;我的工作只是對事業的快速測試。爲了生產,最好使用jfriend00的建議。 – SJuan76

+0

謝謝!很棒! – koela1

0

我已經成功地在 負載處理期間發佈了子iframe中的函數。例如,(替換您了funcName):

在孩子的iframe,編輯body標籤(或使用等效的JavaScript)

<body onload='top.funcName = funcName'> 

在父頁面,編輯的JavaScript;現在 了funcName一般將作爲訪問,
value = top.funcName()

相關問題