window.showModalDialog開啟的頁面需要跳轉或重新整理
最近做專案遇到一個問題:用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進行賦值;
但是上述四種方法執行效率慢...希望精於此道的大神指教一二