action.setPopup()

设置当用户点击浏览器操作图标时打开的弹出窗口的 HTML 文档。没有特定弹出窗口的标签页将继承全局弹出窗口,全局弹出窗口默认为清单中的 default_popup

注意:此 API 在 Manifest V3 或更高版本中可用。

语法

js
browser.action.setPopup(
  details // object
)

参数

details

具有以下属性的对象:

tabId 可选

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

windowId 可选

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

stringnull。作为 URL 指定的在弹出窗口中显示的 HTML 文件。

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

如果在此处传递空字符串(""),则禁用弹出窗口,扩展将收到 action.onClicked 事件。

如果 popupnull

  • 如果指定了 tabId,则删除特定于标签页的弹出窗口,以便该标签页继承全局弹出窗口。
  • 如果指定了 windowId,则删除特定于窗口的弹出窗口,以便该窗口继承全局弹出窗口。
  • 如果省略了 tabIdwindowId,则全局弹出窗口将恢复到默认值。
  • 如果同时提供了 windowIdtabId,则函数失败,弹出窗口未设置。
  • 如果同时省略了 windowIdtabId,则设置全局弹出窗口。

示例

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

js
function onCreated() {
  if (browser.runtime.lastError) {
    console.log("error creating item:", browser.runtime.lastError);
  } else {
    console.log("item created successfully");
  }
}

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

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

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

浏览器兼容性

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