IOSのSafariで_history.pushState
_を呼び出した後、ブラウザの戻るボタンを使用して変更するときに、alert()
、confirm()
、またはPrompt()
を使用できなくなりましたバック。
これはiOSのバグですか?既知の回避策はありますか?
この動作を再現する簡単な例:
_<html>
<body>
<ul>
<li>Step 1: <button onclick="alert(Math.random())">Confirm Alert is working</button></li>
<li>Step 2: <button onclick="history.pushState(null, null, '/debug/'+Math.random());">Change History</button></li>
<li>Step 3: use your browser back button, to go back</li>
<li>Step 4: <button onclick="alert(Math.random())">Alert is not working anymore</button></li>
</ul>
</body>
</html>
_
ここでオンラインで試すことができます: goo.gl/faFW6o 。
これは、Safariのバックフォワードキャッシュが原因です。
次のコードを使用して、戻るボタンが押されたときに強制的にリロードできます。
window.onpageshow = function(e) { // e -> event
if (e.persisted) {
window.location.reload();
}
};
さらに、jQueryを使用している場合...
$(window).bind("pageshow", function(e) { // e -> event
if (e.originalEvent.persisted) {
window.location.reload();
}
});
回避策の1つは、代わりにボタンのプロパティonloadで、リスナーを追加する関数を作成し、それをwindow.onpopstateとwindow.onloadで呼び出します。