在我的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,但回答這個問題不工作,大概是因爲代碼是從彈出的調用。)
這似乎解決了這個問題,但你知道它爲什麼起作用嗎? '.reload()'是否應該恢復iframe的原始屬性(即從HTML源代碼)? –
@Mechanical snail它可能是某種競爭條件,其中'src'被更改,但'reload()'發生在導航生效之前 - 因此它保持在同一頁面上。 –