4

「apple-mobile-web-app-capable」メタ タグを使用して iOS フルスクリーン モードでモバイル サイトを実行している場合、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以外のナビゲーションにより、アプリがサファリにジャンプしてページを提供するという印象を受けました

于 2012-08-28T14:35:59.050 に答える