// 在需保護的頁面腳本最前面
window.history.forward(1);
// 或
setTimeout(() => window.history.forward(), 0);
// 登入成功後跳轉
location.replace('/home'); // 不會在 history 堆疊留下登入頁
// 或重新載入
location.reload(true); // 強制從伺服器重新載入
replace 用新 URL 替換當前歷史條目,無法後退回上一條。
// 登入成功
history.pushState({auth: true}, '', '/home');
// 監聽 popstate
window.addEventListener('popstate', e => {
if (!e.state?.auth) {
history.pushState({auth: true}, '', '/home'); // 強制推回
// 或導向登入頁
}
});
| 方案 | 優點 | 缺點 | 推薦度 |
|---|---|---|---|
| history.forward | 簡單 | 閃爍、可被攔截、體驗差 | ⭐ |
| location.replace | 徹底、無閃爍 | 破壞正常後退導航 | ⭐⭐⭐ |
| History API 狀態 | 可控、可區分業務場景 | 代碼較多 | ⭐⭐⭐⭐ |
建議:**登入流程用 location.replace**,單頁應用結合 History API 狀態管理。