最近做项目遇到一个问题:用window.showModalDialog(url,param,str)方法打开的对话框,需要在其内实现一个页面跳转,但是在跳转链接时,不会在当前页执行,而是弹出一个新的页面。于是在上网查了下,发现有四种解决方法:
1. 通过JS脚本,来模拟点击了A这样的链接,而不使用location试了一下:
var link = document.createElement("a");
link.href = url;
document.body.appendChild(link);
link.click();
}
在调用location的地方,改为调用go_link方法。
要同时配合 <base target="_self"/>
2.模拟表单提交:
1).在页面<head>标签里面添加<base target="_self">;
2).在页面<body>标签里面添加<form id="saveForm" action="" method="POST"></form>;
3).通过下面javascript执行页面跳转;
$("#saveForm").attr("action", "xxx");
$("#saveForm").submit();
3.利用iframe或frameset
在showModalDialog打开的窗口中放入iframe或frameset,然后在此框架中显示page1.html,此时再在page1.html中执行location.href=‘page2.html’则会正常跳转至page2.html,而不会打开一个新窗口.
4.如果不用iframe显示page1.html,则可以将location.href='page2.html'替换为
window.name = "dialogPage";
window.open("page2.html","dialogPage");
此时就可以实现正常的页面跳转;但是使用此方法如果是刷新本页面,即window.open('page1.html','dialogPage');
可能会由于页面缓存的原因,而使得页面无法更新;此时可以设置页面不允许缓存(Response.Cache.SetNoStore())解决该问题;
附:
如果在showModalDialog打开的页面page1.html中往父页面传值,可以使用dialogArguments.document.getElementById("目标控件ID").innerHTML进行赋值;
但是上述四种方法执行效率慢...希望精于此道的大神指教一二