在應用中有這樣一個情況,
在A窗口中打開B窗口,在B窗口中操作完以后關閉B窗口,同時自動刷新A窗口
function?closeWin(){
????????hasClosed?=?true;
????????window.opener.location="javascript:reloadPage();";
????????window.close();
????}
????function?window.onbeforeunload(){
????????if(!hasClosed){
????????????window.opener.location="javascript:reloadPage();";
????????}
????}
</script>
上面的代碼在關閉B窗口的時候會提示錯誤,說缺少Object,正確的代碼如下:
function?closeWin(){
????????hasClosed?=?true;
????????window.opener.location="javascript:reloadPage();";
????????window.opener=null;
????????window.close();
????}
????function?window.onbeforeunload(){
????????if(!hasClosed){//如果已經執行了closeWin方法,則不執行本方法
????????????window.opener.location="javascript:reloadPage();";
????????}
????}
</script>
reloadPage方法如下:
function?reloadPage()?{
????????history.go(0);
????????document.execCommand("refresh")
????????document.location?=?document.location;
????????document.location.reload();
????}
PS:由于需要支持正常關閉和強制關閉窗口時能捕捉到事件,用了全局變量hasClosed
==============================================
補充,在父窗口是frame的時候在刷新父窗口的時候會出現問題:
The?page?cannot?be?refreshed?without?resending?the?information
. 后修改如下:
window.opener.parent.document.frames.item('mainFrame').location.href?=?window.opener.location.href;
不需要執行自帶的reload()方法,注意,不要再畫蛇添足加上這一句:
window.opener.parent.document.frames.item('mainFrame').location.reload();
========================================================================================
最后,為了同時支持刷新普通父窗口和frame父窗口,代碼如下:
function?closeWin()?{
????????hasClosed?=?true;
????<%if(null?!=?frame){%>
????????window.opener.parent.document.frames.item('mainFrame').location.href?=?window.opener.location.href;
????<%}else{%>
????????window.opener.location?=?"javascript:reloadPage();";
????<%}%>
????????//window.opener.top.mainFrame.location="javascript:reloadPage();";
????????//self.opener.frames.mainFrame.location.reload(true);
????????window.opener?=?null;
????????window.close();
????}
????function?window.onbeforeunload(){
????????if?(!hasClosed)?{
????????<%if(null?!=?frame){%>
????????????window.opener.parent.document.frames.item('mainFrame').location.href?=?window.opener.location.href;
????????<%}else{%>
????????????window.opener.location?=?"javascript:reloadPage();";
????????<%}%>
????????????window.opener?=?null;
????????}
????}