1. 程式人生 > >window.showModalDialog開啟的頁面需要跳轉或重新整理

window.showModalDialog開啟的頁面需要跳轉或重新整理

最近做專案遇到一個問題:用window.showModalDialog(url,param,str)方法開啟的對話方塊,需要在其內實現一個頁面跳轉,但是在跳轉連結時,不會在當前頁執行,而是彈出一個新的頁面。於是在上網查了下,發現有四種解決方法:

1. 通過JS指令碼,來模擬點選了A這樣的連結,而不使用location試了一下:

function go_link(url) {
       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進行賦值;

但是上述四種方法執行效率慢...希望精於此道的大神指教一二