ブラウザの「戻る/進む」でページが開かれたことを検知する方法
May 2, 2022
TL;DR #
PerformanceNavigationTiming.type
が "back_forward"
であれば、ブラウザの「戻る/進む」でページが開かれています。
function printNavigationType() {
const perfEntries = performance.getEntriesByType('navigation');
perfEntries.forEach((entity) => {
console.log(entity.type); // e.g. "back_forward"
});
}
説明 #
- ブラウザ環境でグローバルに定義されている
performance
プロパティからはPerformance
オブジェクトが取得できます。 Performance
オブジェクトのgetEntriesByType()
メソッドを使うことでPerformanceNavigationTiming
オブジェクトが取得できます。PerformanceNavigationTiming
オブジェクトのtype
プロパティを見ることで、そのページがどのように開かれたのか判定できます。
- PerformanceNavigationTiming.type - Web APIs | MDN
- https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/type
例えば以下のように判定することができます。
function isBackForwardNavigation() {
const isBrowser = typeof window !== 'undefined';
return (
isBrowser &&
performance.getEntriesByType('navigation').some((entity) => entity.type === 'back_forward')
);
}
補足:performance.navigation.type は非推奨 #
performance.navigation.type
を参照することでも「戻る/進む」の判定ができます。
ただし、performance.navigation
の参照はすでに非推奨となっているため、今後こちらの方法は利用しない方が良いです。
- Performance.navigation - Web APIs | MDN
- PerformanceNavigation.type - Web APIs | MDN
その他参考 #
- JavaScript でページが更新 or 戻る・進むされたかなどを調べる方法 | PisukeCode - Web 開発まとめ
- https://pisuke-code.com/js-get-navigation-type/