browserAction.setPopup()
设置在用户点击浏览器操作图标时,将会以弹出窗口的形式打开的 HTML 文档。没有指定特定弹出窗口的标签页将继承全局弹出窗口,该弹出窗口默认为清单(manifest)文件中指定的 default_popup。
语法
js
browser.browserAction.setPopup( details // 对象 ) 参数
details-
一个包含以下属性的对象:
tabId可选-
integer。仅为特定标签页设置弹出窗口。当用户将此标签页导航到新页面时,弹出窗口会重置。 windowId可选-
integer。仅为指定窗口设置弹出窗口。 popup-
string或null。指定为 URL 的 HTML 文件。这可以指向扩展程序内打包的文件(例如,使用
extension.getURL创建的文件),或者是一个远程文档(例如https://example.org/)。如果这里传递了一个空字符串(
""),弹出窗口将被禁用,扩展程序将接收到browserAction.onClicked事件。如果
popup为null:- 如果指定了
tabId,则移除特定标签页的弹出窗口,使该标签页继承全局弹出窗口。 - 如果指定了
windowId,则移除特定窗口的弹出窗口,使该窗口继承全局弹出窗口。 - 如果
tabId和windowId都省略,则将全局弹出窗口恢复为默认值。
- 如果指定了
- 如果同时提供了
windowId和tabId,函数将失败且弹出窗口不会设置。 - 如果同时省略
windowId和tabId,则设置全局弹出窗口。
浏览器兼容性
示例
以下代码添加了一对上下文菜单项,用于在两个弹出窗口之间切换。请注意,你需要在扩展的清单中设置“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。