2012-08-28 64 views
4

當我在iOS全屏模式下使用「apple-mobile-web-app-capable」元標記運行移動網站時,我使用AJAX和同步頁面請求(包括重定向)的組合,在用戶登錄時成功。「apple-mobile-web-app-capable」網站在註銷後切換到Mobile Safari

但是,當用戶註銷並且會話被銷燬時,iOS設備將保持全屏模式並打開登錄移動Safari窗口中的頁面。

這裏是事件的共同序列:

  1. 用戶點擊主屏幕按鈕,在iOS的全 屏幕模式推出移動網站
  2. 服務器重定向用戶到登錄頁面的全屏認證(仍)
  3. 用戶登錄,並且被重定向回手機之家(還是在全屏)
  4. 用戶進行各種操作,通過GET和POST,一些使用AJAX,有些不是(仍處於全屏)
  5. 用戶點擊退出按鈕,它破壞會議,並重定向到登錄頁面
  6. 移動Safari瀏覽器窗口打開並呈現登錄頁面,這第二次

我已經試過301,302和303重定向上登出的成功並沒有什麼似乎改變了這種行爲。這似乎與用戶的會話在全屏模式下運行時相關。我不認爲這很重要,但安全機制是通過在Tomcat上運行的Spring Security實現的。

有什麼辦法可以防止這種行爲?我不希望在註銷時使用location.href客戶端重定向。

回答

6

您可以通過使用jQuery的事件委託爲頁面上的所有鏈接分配單個頂級事件處理程序來取消鏈接默認行爲。當檢測到點擊事件時,我們取消默認行爲(即在移動Safari中打開),然後手動更改窗口的位置。這種方法可以在不破壞iPhone獨立應用程序體驗的情況下更改頁面。

http://www.bennadel.com/blog/2302-Preventing-Links-In-Standalone-iPhone-Applications-From-Opening-In-Mobile-Safari.htm

我的印象是從運行到這個之前,任何非Ajax/JavaScript的導航會導致應用程序跳進Safari瀏覽器,從而在頁面

+0

有趣。也許在較新版本的iOS中,它只發生在會話丟失?就像我說的,我寧願不使用客戶端重定向,但我會嘗試一下。 – kgx

+0

那麼,如您所描述的那樣使用客戶端重定向可以防止Mobile Safari在註銷成功時打開。我正在嘗試在舊iOS設備上測試此網站,以查看我的所有鏈接是否都需要此行爲,或者只是註銷鏈接。 – kgx

+1

我仍然無法弄清楚是什麼導致切換到移動Safari的註銷成功行動在特定的,而不是每一個其他同步後 - 重定向 - 得到,但你是正確的...唯一的方法來防止這種行爲似乎是在客戶端處理。 – kgx