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 语法

参数

监听器

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

details

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

filter 可选

object。一个包含单个属性 url 的对象,该属性是 Array,其中包含 events.UrlFilter 对象。如果包含此参数,则事件仅针对匹配数组中至少一个 UrlFilter 的过渡触发。如果省略此参数,则事件针对所有过渡触发。请注意,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。

示例

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

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