作成日:2021-10-23, 更新日:2021-10-27
経緯
1.適当なページを開く(メニューは閉じられている)
2.閉じられているメニューを開く
3.違うページに遷移
4.ブラウザバック(ブラウザで「戻る」ボタンを押したとき)で戻る
5.「2」の状態になる。希望は「1」のメニューが閉じられた状態
対策
以下、メモ。
・chromeはセキュリティ対策で「popstate」はすでに使えない(2021-10-23時点)
・iPhoneサファリは「bfcache(Back Forward Cache)」が有効
・「bfcache(Back Forward Cache)」が有効な場合、キャッシュを表示。有効でないならキャッシュではなくページを読み込む・・・らしい
・端末かブラウザの何が原因なのかは不明だけど・・・取得できない何かがある
→ひとまず問題は無いっぽい(2021-10-27時点)
サンプル
▼2021-10-23時点の暫定処理
noHave_bfcache = function() {
let perfEntries = performance.getEntriesByType('navigation');
if ( perfEntries.length == 0 ) {
// perfEntriesが空っぽ: ブラウザバックではない・・・と思う。取得できない端末(or ブラウザ)がある。
}
else {
perfEntries.forEach(function(flg){ // 複数個取得されることがあるのかは不明・・・状況によって中のif文でbreak的な何かをいれた方がいいかも?
if (flg.type == 'back_forward'){
// ブラウザバックの時
}
else {
// ブラウザバックではない時
}
});
}
}
window.onpageshow = function(event) { // キャッシュが残った状態でページが表示された時に発生: キャッシュは関係あるのか・・・微妙
if (event.persisted) {
// 「bfcache(Back Forward Cache)」を検出→ブラウザバック・・・iPhoneサファリだけかも?
window.location.reload(); // 基本、リロード。リロードがイヤなら任意の処理
}
else {
// 「bfcache(Back Forward Cache)」を検出していないので、さらに深掘りする
noHave_bfcache();
}
};