在我的Web应用程序中,用户可以打开一个弹出窗口来选择编辑对象。当用户在弹出窗口上按OK时,它应该根据选择的对象更新父窗口中的iframe的src
(当然还会重新加载iframe)。
我的功能(在父窗口中)是:
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
, 会按预期工作。
我可以使用<input>
以相同的方式更改隐藏的document.getElementById("hidden_id").value = newId;
字段的值。
所有内容都来自同一个网站。
(与Changing iframe src with Javascript类似,但该问题的答案不起作用,大概是因为代码是从弹出窗口调用的。)
答案 0 :(得分:1)
拿出这条线:
elem_iframe.contentWindow.location.reload();
它正在重新加载iframe并且未加载新的src。