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就是指向父窗体。

 

posted @ 2023-03-09 11:30  汜水渟  阅读(16)  评论(0编辑  收藏  举报