Movatterモバイル変換


[0]ホーム

URL:


  1. 面向开发者的 Web 技术
  2. Web API
  3. NavigateEvent

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in EnglishAlways switch to English

NavigateEvent

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

实验性:这是一项实验性技术
在将其用于生产之前,请仔细检查浏览器兼容性表格

导航 APINavigateEvent 接口是navigate 事件的事件对象,该事件会在任何类型的导航启动时触发(这包括使用历史记录 API 的特性,如History.go())。NavigateEvent 对象提供对该导航信息的访问,并允许开发人员拦截和控制导航处理。

Event NavigateEvent

构造函数

NavigateEvent()实验性

创建一个新的NavigateEvent 对象实例。

实例属性

从其父接口Event 继承属性。

canIntercept只读实验性

如果导航可以被拦截,则返回true,否则返回false(例如,你无法拦截跨源导航)。

destination只读实验性

返回一个NavigationDestination 对象,表示要导航到的目标。

downloadRequest只读实验性

如果是下载导航(例如,具有download 属性的<a><area> 元素),则返回请求下载的文件的文件名,否则返回null

formData只读实验性

如果是POST 表单提交,则返回表示已提交数据的FormData 对象,否则返回null

hashChange只读实验性

如果导航是片段导航(即导航到同一文档中的片段标识符),则返回true,否则返回false

hasUAVisualTransition只读实验性

如果用户代理在派发此事件之前为此导航执行了用户可见的视图过渡,则返回true,否则返回false

info只读实验性

返回由启动导航操作(例如Navigation.back()Navigation.navigate())传递的info 数据值,如果没有传递info 数据,则返回undefined

navigationType只读实验性

返回导航类型——pushreloadreplacetraverse

signal只读实验性

返回AbortSignal,如果取消导航(例如,用户按下浏览器的“停止”按钮,或者另一个导航启动并因此取消正在进行的导航),该信号将中止。

userInitiated只读实验性

如果导航是由用户发起的(例如,通过单击链接、提交表单或按浏览器的“后退”/“前进”按钮),则返回true,否则返回false

实例方法

从其父接口Event 继承方法。

intercept()实验性

拦截此导航,将其转换为指向destination URL 的同一文档导航。它可以接受定义导航处理行为应该是什么的处理器函数,以及focusResetscroll 选项以根据需要控制行为。

scroll()实验性

如果你希望在导航处理完成之前发生,可以调用它来手动触发响应导航而发生的浏览器驱动的滚动行为。

示例

使用intercept() 处理导航

js
navigation.addEventListener("navigate", (event) => {  // 如果此导航不应被拦截,则提前退出,例如,如果导航是跨源的,或者是下载请求  if (shouldNotIntercept(event)) return;  const url = new URL(event.destination.url);  if (url.pathname.startsWith("/articles/")) {    event.intercept({      async handler() {        // URL 已更改,因此在获取新内容时显示占位符,例如旋转图标或加载页面        renderArticlePagePlaceholder();        // 获取新内容并在准备就绪时显示        const articleContent = await getArticleContent(url.pathname);        renderArticlePage(articleContent);      },    });  }});

备注:在导航 API 可用之前,要执行类似操作,你必须监听链接上的所有点击事件,运行e.preventDefault(),执行适当的History.pushState() 调用,然后根据新 URL 设置页面视图。而且这无法处理所有导航——只能处理用户发起的链接点击。

使用scroll() 处理滚动

在这个拦截导航的例子中,handler() 函数首先获取并呈现一些文章内容,然后获取并呈现一些次要内容。尽快将页面滚动到主要文章内容以便用户与其交互是有意义的,而不是等到次要内容也呈现后再滚动。为了实现这一点,我们在两者之间添加了scroll() 调用。

js
navigation.addEventListener("navigate", (event) => {  if (shouldNotIntercept(navigateEvent)) return;  const url = new URL(event.destination.url);  if (url.pathname.startsWith("/articles/")) {    event.intercept({      async handler() {        const articleContent = await getArticleContent(url.pathname);        renderArticlePage(articleContent);        event.scroll();        const secondaryContent = await getSecondaryContent(url.pathname);        addSecondaryContent(secondaryContent);      },    });  }});

规范

Specification
HTML
# the-navigateevent-interface

浏览器兼容性

参见

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp