2011-08-30 169 views
0

在我的web應用程序中,用戶可以打開一個彈出窗口來選擇一個對象的編輯。當用戶在彈出窗口上按OK時,它應該根據選擇哪個對象更新父窗口中的iframe的src(當然還有重新加載iframe)。從彈出窗口更改iframe的src

我的功能(在父窗口)是:

function dismissEditPopup(win, newId) { 
    newId = html_unescape(newId); 
    var elem_iframe = document.getElementById("iframe_id"); 

    // (*) this line doesn't work 
    elem_iframe.src = '/view_object/' + newId; 

    elem_iframe.contentWindow.location.reload(); 

    win.close(); 
} 

這個功能是從一個彈出窗口,其中包含一個腳本調用:

<script type="text/javascript"> 
    opener.dismissEditPopup(window, "hash_of_new_object"); 
</script> 

的問題是該行(*)失敗默默。在Firefox 3.6和Google Chromium的檢查員中,我看到iframe src屬性更新爲,但elem_iframe.contentWindow.location.href未更改。 (如果我添加一行elem_iframe.contentWindow.location.href = elem_iframe.src;,分配將被忽略。)。 Javascript錯誤控制檯中沒有錯誤。奇怪的是,它確實按預期工作,如果我從Javascript控制檯分配到elem_iframe.src

我可以使用document.getElementById("hidden_id").value = newId;以相同的方式更改隱藏的<input>字段的值。

一切都來自同一個網站。

(類似Changing iframe src with Javascript,但回答這個問題不工作,大概是因爲代碼是從彈出的調用。)

回答

1

走這條線了:

elem_iframe.contentWindow.location.reload(); 

它重裝iframe和新的src未加載。

+0

這似乎解決了這個問題,但你知道它爲什麼起作用嗎? '.reload()'是否應該恢復iframe的原始屬性(即從HTML源代碼)? –

+1

@Mechanical snail它可能是某種競爭條件,其中'src'被更改,但'reload()'發生在導航生效之前 - 因此它保持在同一頁面上。 –