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