webNavigation.onCreatedNavigationTarget

当创建一个新窗口或现有窗口中的新标签以承载导航目标时触发。例如,当以下情况发生时会发送此事件:

  • 用户在新标签或窗口中打开链接
  • 网页使用 window.open() 将资源加载到新标签或窗口中(但请注意,如果浏览器的弹出窗口阻止程序阻止了加载,则不会发送事件)。

如果创建标签或窗口没有导航目标(例如,用户按 Ctrl+T 打开新标签),则不会发送事件。

如果触发此事件,它将在 webNavigation.onBeforeNavigate 之前触发。

语法

js
browser.webNavigation.onCreatedNavigationTarget.addListener(
  listener,                   // function
  filter                      // optional object
)
browser.webNavigation.onCreatedNavigationTarget.removeListener(listener)
browser.webNavigation.onCreatedNavigationTarget.hasListener(listener)

事件具有三个功能

addListener(listener)

向此事件添加侦听器。

removeListener(listener)

停止侦听此事件。listener 参数是要删除的侦听器。

hasListener(listener)

检查 listener 是否注册到此事件。如果正在侦听,则返回 true,否则返回 false

addListener 语法

参数

listener

当此事件发生时调用的函数。该函数传递此参数

details

object。有关导航事件的详细信息。有关更多信息,请参见 details 部分。

filter 可选

object。包含单个属性 url 的对象,该属性是 events.UrlFilter 对象的 Array。如果您包含此参数,则事件仅针对与数组中至少一个 UrlFilter 匹配的 URL 的转换触发。如果您省略此参数,则事件将针对所有转换触发。请注意,filter 在 Firefox 中不受支持。

其他对象

details

sourceFrameId

integer。启动导航的框架的 ID。0 表示框架是标签的顶级浏览上下文,而不是嵌套的 <iframe>。正值表示导航是从嵌套的 iframe 启动的。框架 ID 对给定的标签和进程是唯一的。

processId 可选 已弃用

integer。此值在现代浏览器中未设置。当它被设置时,它表示导航起源的进程的 ID。

sourceTabId

integer。启动导航的标签的 ID。例如,如果用户在新标签中打开链接,这将是包含链接的标签的 ID。

tabId

integer。新创建标签的 ID。

timeStamp

number。浏览器创建导航目标的时间,以 自纪元以来的毫秒数 为单位。

url

string。将在新标签中加载的 URL。

windowId

number。创建新标签的窗口的 ID。

浏览器兼容性

BCD 表格仅在浏览器中加载

示例

记录 onCreatedNavigationTarget 的目标 URL、源标签 ID 和源框架 ID,如果目标的主机名包含 "example.com" 或以 "developer" 开头。

js
const filter = {
  url: [{ hostContains: "example.com" }, { hostPrefix: "developer" }],
};

function logOnCreatedNavigationTarget(details) {
  console.log(`onCreatedNavigationTarget: ${details.url}`);
  console.log(details.sourceTabId);
  console.log(details.sourceFrameId);
}

browser.webNavigation.onCreatedNavigationTarget.addListener(
  logOnCreatedNavigationTarget,
  filter,
);

注意:此 API 基于 Chromium 的 chrome.webNavigation API。本文档源自 Chromium 代码中的 web_navigation.json