2017-03-21 15 views
1

私は、モバイル(iOS版10.2.1)のSafariやChromeの[戻る]ボタンを使用する場合:ページはiOSのブラウザで戻るフォワードキャッシュから取得されたときに、一貫発射されるイベント

  • ウィンドウのpageshowイベントをfired only onceです。 がで提案:
  • 7654321ウィンドウのpopstateイベントは発生しません。 in:1,2,3
  • 文書のreadystatechangeイベントが発生していません。 で提案されました:1

なぜこれが必要ですか?

クリックで送信ボタンを無効にするため、フォームを複数回送信することはできませんが、ブラウザの戻るボタンを使用してページに戻ると、送信ボタンはBFCacheのために無効のままです。

ユーザーがページを離れたとき、または戻ったときに発生して、送信ボタンを再び有効にすることができるイベントが必要です。アンロードイベントが発生されることはありません、とpagehideとpageshowのイベントは初回のみで焼成されています

  1. は、私はページB. Aのpagehideが発射される
  2. にページAから移動(アンロードが発生しません)。
  3. ブラウザの戻るボタンを使用して戻る。
  4. Aのページショーが発生しています(load、popstateまたはreadystatechangeは起動されません)。
  5. もう一度Bに移動しますが、今回のAのページは非表示になります。
  6. もう一度戻るボタンを使用して戻ると、Aのページショーも起動されません。
  7. その後のバック/フォワードは、私が見つけることができるイベントを引き起こさない。

回避策の一つは、最初の後ろにページを更新します

window.addEventListener('pageshow', function (e) { 
    if (e.persisted) { 
     window.location.reload(); 
    } 
}, false); 

しかし、それはBFCacheの全体のポイントを挑みます。ブラウザの「戻る」ボタンがページ全体を再読み込みせずに使用されているときに、何らかの作業を行う信頼できる方法はありませんか?

+0

これで運が良かったですか?私はまだこれを動作させることに苦労しています。 – morgoe

答えて

0

ここに、欲求不満の回避策があります:
iOSブラウザを検出するためにユーザーエージェントの盗聴を使用して最初にページを再読み込みすることによってBFキャッシュを無効にします。

window.addEventListener('pageshow', function (e) { 
    e.persisted && 
    /iPad|iPhone|iPod/.test(navigator.userAgent) && 
    !window.MSStream && 
    window.location.reload(); 
}, false); 
関連する問題