今天再次使用showModalDialog(),發現了兩個問題,一是子窗口如何刷新父窗口,二是窗口的參數問題。
1 子窗口刷新父窗口
如果是window.open();問題就好辦,直接用window.opener.location.reload();就搞定了
但是如果是window.showModalDialog(),它里面是沒有window.opener的,不能用opener引用父窗口,直接調用用報錯。
總結了一下有兩種方法可以解決,一是在子窗口中刷新父窗口,二是在子窗口關閉后,父窗口自己刷新。
(1)在子窗口中刷新父窗口
父窗口: 因為子窗口不能直接引用父窗口,所以需要父窗口主動傳遞指針變量,就是window.showModalDialog的第二個參數,參數為“window”,意思就是把父窗口對象當做參數傳遞給子窗口,
示例:
var returnValue = window.showModalDialog(url,window,"dialogHeight=350px;dialogWidth=400px; center=yes;status=no;scroll=no;resizable=yes");
注意:window不要加引號。
子窗口:執行完操作后調用window.dialogArguments.location.reload();
注意:是window.dialogArguments,而不是window.dialogArgument,之前一直測試通過不了,就是這個屬性寫錯了
window.dialogArguments 即為父窗口window對象的引用,獲得父窗口的引用,就可以操作父窗口了,做什么都行,
但是調用window.dialogArguments.location.reload();父頁面好像並沒有刷新,原因未知??!!
(2)在父窗口中刷新自己
這個實現比較簡單,在子窗口關閉后,父窗口自己刷新,例如:
var returnValue = window.showModalDialog(url,window,"dialogHeight=350px;dialogWidth=400px;center=yes;status=no;scroll=no;resizable=yes");
if(returnValue == "true"){
window.location.reload();
}
還有一種方法就是在子窗口中調用父窗口的一個方法,該方法自己刷新本頁面(父窗口);
子窗口:window.dialogArguments.reloadPage();window.close;
父窗口: function reloadPage(){window.location.reload();}
2 showModalDialog參數問題:
vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]);
第三個參數用來描述對話框的外觀等信息,我調整了半天都不見效,后來發現原因出現在兩個地方:
(1)長度,寬度,都是用 dialogHeight, dialogWidth表示,而不是heigh,width,和window.open()是不同的。
(2)多個參數用";"分割,而不是用","。
我就是因為粗心,在這兩個地方浪費了很多時間,大家不要重蹈覆轍,要信心,把參數記牢!