Webform下JS子传父遇到的问题
今天偶然收到一个老项目的bug,现象是在非IE下,父窗体调用子窗体后,无法正确执行回调方法。
父窗体调用的逻辑
if (IE) {
returnVal = window.showModalDialog(url, '',condition);
}
else{
returnVal = window.open(url, '_bank',condition);
}
if (returnVal == 1) {
window.location.href = window.location.href;
}
子窗体回复内容
Response.Write("<script language='javascript'>window.returnValue=1;window.close(); </script>");
问题比较明显,接收不到returnVal 。console之后发现是一个window窗体,然后我走了一圈弯路,以为是 Response.Write的内容被包装成了window。后来才发现window.open返回的returnVal 其实是整个子窗体。
在不改动原有逻辑的情况下增加如下内容
父窗体增加方法
function RefreshPage() {
window.location.href = window.location.href;
}
子窗体
Response.Write("<script language='javascript'>window.returnValue=1;window.opener.RefreshPage();window.close(); </script>");
增加window.opener.RefreshPage(); 其中window.opener就是指向父窗体。