Navigation API 结构化导航:历史拦截、滚动恢复与表单导航优化技术背景Navigation API(`navigation`)提供结构化的导航与历史管理能力,支持拦截与处理链接点击、表单提交与脚本导航,实现更自然的 SPA 行为与滚动恢复。核心内容拦截与路由处理if ('navigation' in window) {
(navigation as any).addEventListener('navigate', (e: any) => {
const url = new URL(e.destination.url);
if (url.origin === location.origin) {
e.intercept({ handler: () => renderRoute(url.pathname) });
}
});
}
function renderRoute(path: string) { const view = document.getElementById('view')!; view.textContent = `Route: ${path}`; }
滚动恢复与状态if ('navigation' in window) {
(navigation as any).scrollRestoration = 'manual';
(navigation as any).addEventListener('navigatesuccess', () => {
const state = (navigation as any).currentEntry.getState();
if (state?.scroll) window.scrollTo(state.scroll.x, state.scroll.y);
});
}
function saveScroll() { const entry = (navigation as any).currentEntry; entry?.replaceState({ scroll: { x: scrollX, y: scrollY } }, null); }
window.addEventListener('scroll', throttle(saveScroll, 300));
表单导航优化document.addEventListener('submit', (e) => {
const form = e.target as HTMLFormElement;
if ('navigation' in window && form.method.toLowerCase() === 'get') {
e.preventDefault();
const action = new URL(form.action);
const params = new URLSearchParams(new FormData(form) as any);
action.search = params.toString();
(navigation as any).navigate(action);
}
});
技术验证参数在 Chrome 128/Edge 130(支持 Navigation API 的环境):滚动恢复成功率:≥ 95%表单导航体验改善:≥ 20–40%拦截处理性能:P95 < 10ms应用场景SPA 行为与结构化历史管理表单 GET 导航与参数化页面最佳实践仅在同源路径上拦截,保留跨源默认行为保存滚动状态并在成功导航后恢复对表单 GET 导航使用结构化处理,提升一致性

发表评论 取消回复