判斷是否從"上一頁"進入網頁
用
由於我使用 Laravel + Inertia,編譯過後的網頁返回上一頁不會觸發
經測試:
npm run build 走 event.persisted
npm run dev 走 performance.getEntriesByType
問題紀錄:
上面的程式一段時間之後開發環境變成不會觸發,所以又改了寫法,但如果連到外站再回來好像也有問題,持續測試中。
performance.getEntriesByType("navigation") 搭配 pageshow 事件,缺點是只能告訴你這次進入頁面的方式,但是不會告訴你「上一頁的 URL」,所以沒辦法做更細緻的判斷。由於我使用 Laravel + Inertia,編譯過後的網頁返回上一頁不會觸發
performance.getEntriesByType("navigation"),所以要再加上 pageshow 事件。經測試:
npm run build 走 event.persisted
npm run dev 走 performance.getEntriesByType
// 使用者是從上一頁返回的
// npm run build 走這邊
window.addEventListener("pageshow", (event) => {
if (event.persisted) {
console.log("上一頁返回");
}
});
// npm run dev 走這邊
const entries = performance.getEntriesByType("navigation");
if (entries[0] && entries[0].type === "back_forward") {
console.log("上一頁返回");
}
// 兩者整合
window.addEventListener("pageshow", (event) => {
if (
event.persisted ||
performance.getEntriesByType("navigation")[0]?.type === "back_forward"
) {
console.log("上一頁返回");
}
});
問題紀錄:
上面的程式一段時間之後開發環境變成不會觸發,所以又改了寫法,但如果連到外站再回來好像也有問題,持續測試中。
// 使用者是從上一頁返回的
window.addEventListener('popstate', function () {
if (event.state.props.routeName == 'your route name') {
console.log("上一頁返回");
}
});
留言
張貼留言