webNavigation.onCreatedNavigationTarget

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

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

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

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

语法

js
browser.webNavigation.onCreatedNavigationTarget.addListener(
  listener,                   // 函数
  filter                      // 可选对象
)
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)。如果包含此参数,则仅当目标 URL 匹配数组中至少一个 UrlFilter 时,事件才会触发。如果省略此参数,则事件会为所有导航触发。请注意,Firefox 不支持 filter

附加对象

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