在我的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()'发生在导航生效之前 - 因此它保持在同一页面上。 –