2012-08-14 113 views
1

所以,我已經看到了一個網站這種做法(我不記得了,雖然)和它的工作原理是這樣的:關閉當前窗口或標籤時,彈出打開

首先,有一個簡單的頁面用一個簡單的登錄表單。但是,當您單擊表單的登錄按鈕時,如果用戶和密碼的驗證是肯定的,並且服務器的響應也是肯定的,則會出現一個新的彈出窗口(其中包含使用javascript編寫的應用程序 - ExtJS)和瀏覽器的當前選項卡(這是登錄表單頁面)關閉。

在我看來,這是一個很好的方法,因爲ExtJS是一個單頁面應用程序模式,功能強大,足以運行完整的AJAX,沒有可見的重定向。此外,彈出式場景消除了瀏覽器頁面控制按鈕(後退,前進,刷新),地址欄是隻讀的。

現在,我試圖通過使用ASP.NET作爲服務器端腳本語言的幫助,將ExtJS作爲主要應用程序進行重現。因此,其結果將是如下:

  1. 登錄頁面,登錄表單 - HTML5 + CSS3
  2. 應用頁面(彈出窗口) - 純粹的ExtJS
  3. Web服務 - ServiceStack

Web服務公開用於登錄目的的方法以及其他方法,並且它始終返回JSON響應。在打開彈出窗口並關閉窗口之前,必須設置會話變量(如果登錄成功)。

在這裏,問題來了:

如何可以完成打開一個彈出和關閉當前窗口/標籤如果登錄成功,這種情況發生?任何幫助,提示,參考,建議,批評完全是我所期待的。

謝謝!

回答

1

您應該可以在打開另一個窗口後關閉當前窗口。

window.open('new window url'); window.close(); 

我想這對我的盒子,並且它運作良好,在Chrome和Safari

<input type="button" onClick="window.open('popop.html'); window.close();" value="open" /> 
+0

謝謝你的回覆!問題是窗口不能在彈出窗口中打開,因此瀏覽器控制按鈕仍然存在。在Firefox 14.0.1中,它會打開一個新標籤,並且不會關閉當前標籤。在「Internet Explorer 9」中,它要求關閉確認,而在「Opera 11.64」中,就像在Chrome和Safari中一樣。 – 2012-08-14 09:33:23

+0

編輯:它在Opera 12.01中也不能正常工作。它的行爲就像「Firefox 14.0.1'' – 2012-08-14 11:56:32

+0

你不想擁有瀏覽器控制按鈕? – fengd 2012-08-14 15:37:37

0

從打開的彈出窗口請路程,如果你真的不必。所有現代瀏覽器都設置爲防止默認打開彈出窗口。

AFAIK打開新窗口(具有目標屬性)的唯一100%方案是由用戶點擊的超鏈接。
window.open()甚至document.getElementById("hiddenLink").click()被某些瀏覽器阻止。

這樣做是否有真正的好處,還是隻是該網站的虛假新穎?您陳述的原因在單窗口情況下都很好。

+0

是的,有。一個巨大的優勢是,在彈出窗口中,地址欄是隻讀的,而我是gusta。爲什麼?因爲,AFAIK,客戶端用戶不能將網站的位置(我的意思是地址)更改爲另一個。這樣可以防止任何ajax調用或語句沒有正常結束等等。我唯一需要擔心的是如果用戶跳過註銷過程,則會捕獲窗口的關閉事件以執行一些清理。後退和前進按鈕在這裏是無用的(它是一個單頁面應用程序),刷新快捷鍵可以被捕獲和忽略。 – 2012-08-14 12:18:13

+0

@CosminT .:在某些情況下,可能需要只讀地址欄,我同意。如果您的頁面正在自己的窗口中運行。 其餘的原因是有問題的。你是否解決了正確的問題? – 2012-08-16 08:23:35

+0

「解決正確的問題」是什麼意思? – 2012-08-16 14:21:45