2013-08-21 56 views
0

我在需要執行某些服務器端代碼然後關閉瀏覽器窗口的aspx頁面上有一個退出按鈕。該按鈕有一個OnClick事件和一個OnClientClick事件。 OnClientClick事件調用將執行回發然後關閉窗口的方法。該代碼在IE中正常工作,但不會在Chrome中執行回發。窗口在兩種情況下關閉。這是我的代碼。我檢查,看看它是瀏覽器,但在這一點上__doPostBack在Chrome中不起作用

function closeMainWindow(control) { 
      var clientIDName = control.name; 
      if (navigator.userAgent.indexOf('Chrome') != -1) { 
       __doPostBack(clientIDName, ''); 
        window.open('', '_self', ''); //need this for Chrome 
        window.close(); 
        return false; 
      } 
       else { 
       __doPostBack(clientIDName, ''); 
       window.open('', '_self', ''); //bypasses warning from IE 
       window.close(); 
       return false; 
      } 

這裏沒有做任何事情在每種情況下不同的是按鈕的代碼。

<asp:Button ID="btnExit" runat="server" Text="Yes" Width="50px" OnClick="btnExit_Click" OnClientClick="javascript:return closeMainWindow(this);" /> 

我將不勝感激,就如何使在Chrome這項工作有任何建議或是否有執行服務器端代碼,然後關閉瀏覽器窗口更好/不同的方式。

+0

Chrome的Javascript控制檯中是否有任何錯誤? – Oscar

+0

我是否遺漏了一些東西,或者是在您的發佈代碼中Chrome與非Chrome的邏輯不相同? –

+0

我想關閉窗口而不確定你的POST請求已被完全處理是一個壞主意。如果你不想像@YuriyGalanter建議的那樣實現一些服務器端的js,你應該依賴一些異步的js表單發佈,例如jQuery Form Plugin(http://malsup.com/jquery/form/) – jbl

回答

2

您不必在onClientClick上執行「window.close()」,刪除該客戶端代碼。執行普通回發沒有「__doPostBack()」,並在該服務器端回發代碼發送「window.close();」通過「ClientScript.RegisterStartupScript」返回到客戶端

+0

我試過這種方法。它執行但不關閉窗口。 ClientType.RegisterStartupScript(GetType(),「cwin」,「window.close();」); –

+0

你必須傳遞一個參數:'ClientScript.RegisterStartupScript(GetType(),「cwin」,「window.close();」,true);' - 這將在JS代碼周圍生成適當的SCRIPT標籤 –

+0

Works Great !! !謝謝你的幫助。 –