4

在 iOS 全屏模式下运行移动网站时,使用“apple-mobile-web-app-capable”元标记,我使用 AJAX 和同步页面请求(包括重定向)的组合,在用户登录时成功.

但是,当用户注销并且会话被破坏时,iOS 设备会离开全屏模式并在 Mobile Safari 窗口中打开登录页面。

这是一个常见的事件序列:

  1. 用户单击主屏幕上的按钮以在 iOS 全屏模式下启动移动网站
  2. 服务器将用户重定向到登录页面进行身份验证(仍然全屏)
  3. 用户登录,并被重定向回移动主页(仍然全屏)
  4. 用户通过 GET 和 POST 执行各种操作,有些使用 AJAX,有些不使用(仍然全屏)
  5. 用户点击注销按钮,这会破坏会话并重定向回登录页面
  6. 移动 Safari 窗口第二次打开以呈现登录页面

我在注销成功时尝试了 301、302 和 303 重定向,但似乎没有任何改变这种行为。它似乎与在全屏模式下运行时用户的会话结束有关。我认为这并不重要,但安全机制是通过运行在 Tomcat 上的 Spring Security 实现的。

有什么办法可以防止这种行为?我不希望在注销时使用 location.href 客户端重定向。

4

1 回答 1

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 以提供页面

于 2012-08-28T14:35:59.050 回答