browserAction.setPopup()

设置在用户点击浏览器操作图标时,将会以弹出窗口的形式打开的 HTML 文档。没有指定特定弹出窗口的标签页将继承全局弹出窗口,该弹出窗口默认为清单(manifest)文件中指定的 default_popup

语法

js
browser.browserAction.setPopup(
  details // 对象
)

参数

details

一个包含以下属性的对象:

tabId 可选

integer。仅为特定标签页设置弹出窗口。当用户将此标签页导航到新页面时,弹出窗口会重置。

windowId 可选

integer。仅为指定窗口设置弹出窗口。

stringnull。指定为 URL 的 HTML 文件。

这可以指向扩展程序内打包的文件(例如,使用 extension.getURL 创建的文件),或者是一个远程文档(例如 https://example.org/)。

如果这里传递了一个空字符串(""),弹出窗口将被禁用,扩展程序将接收到 browserAction.onClicked 事件。

如果 popupnull

  • 如果指定了 tabId,则移除特定标签页的弹出窗口,使该标签页继承全局弹出窗口。
  • 如果指定了 windowId,则移除特定窗口的弹出窗口,使该窗口继承全局弹出窗口。
  • 如果 tabIdwindowId 都省略,则将全局弹出窗口恢复为默认值。
  • 如果同时提供了 windowIdtabId,函数将失败且弹出窗口不会设置。
  • 如果同时省略 windowIdtabId,则设置全局弹出窗口。

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Firefox for Android
Safari on iOS
setPopup
details.windowId parameter
The popup property of the details parameter can be set to null.

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Has more compatibility info.

示例

以下代码添加了一对上下文菜单项,用于在两个弹出窗口之间切换。请注意,你需要在扩展的清单中设置“contextMenus”权限才能创建上下文菜单项。

js
function onCreated() {
  if (browser.runtime.lastError) {
    console.log("创建项目时出错:", browser.runtime.lastError);
  } else {
    console.log("项目创建成功");
  }
}

browser.contextMenus.create(
  {
    id: "popup-1",
    type: "radio",
    title: "弹出窗口 1",
    contexts: ["all"],
    checked: true,
  },
  onCreated,
);

browser.contextMenus.create(
  {
    id: "popup-2",
    type: "radio",
    title: "弹出窗口 2",
    contexts: ["all"],
    checked: false,
  },
  onCreated,
);

browser.contextMenus.onClicked.addListener((info, tab) => {
  if (info.menuItemId === "popup-1") {
    browser.browserAction.setPopup({ popup: "/popup/popup1.html" });
  } else if (info.menuItemId === "popup-2") {
    browser.browserAction.setPopup({ popup: "/popup/popup2.html" });
  }
});

备注: 此 API 基于 Chromium 的 chrome.browserAction API。该文档衍生自 Chromium 代码中的 browser_action.json