windows.create()

创建一个新窗口。

创建窗口时,你可以

  • 在窗口中加载一个或多个新选项卡。
  • 将一个选项卡从现有窗口移动到新窗口。
  • 设置窗口的大小和位置。
  • 创建一个“面板”样式的窗口,在该上下文中,这意味着一个没有正常浏览器 UI(地址栏、工具栏等)的窗口。
  • 设置窗口的各种属性,例如是否处于焦点或私密模式。

这是一个异步函数,它返回一个 Promise

语法

js
let creating = browser.windows.create(
  createData            // optional object
)

参数

createData 可选

object.

allowScriptsToClose 可选

boolean。打开窗口时,它将包含一个选项卡,如果指定了 url 并且包含一个包含多个 URL 的数组,则包含多个选项卡。默认情况下,这些页面中运行的脚本不允许使用 window.close() 关闭其选项卡。如果你包含 allowScriptsToClose 并将其设置为 true,则此默认行为将更改,因此脚本可以关闭其选项卡。请注意,

  • 这仅适用于创建窗口时打开的选项卡。如果用户在此窗口中打开更多选项卡,则脚本将无法关闭这些新选项卡。
  • 如果 url 中提供的 URL 指向 扩展页面(即,它们是包含在此扩展中并使用“moz-extension:”协议加载的页面),那么脚本默认情况下允许关闭这些选项卡。
cookieStoreId 可选

integer。如果存在,则指定打开窗口时创建的所有选项卡的 CookieStoreId。有关使用 cookieStoreId 的更多信息,请参阅 使用上下文身份

focused 可选

boolean。如果为 true,新窗口将处于焦点。如果为 false,新窗口将在后台打开,当前处于焦点的窗口将保持焦点。默认为 true

height 可选

integer。新窗口的高度(以像素为单位),包括框架。如果未指定,则默认为自然高度。

incognito 可选

boolean。新窗口是否应为隐身(私密)窗口。请注意,如果你指定了 incognitotabId,则 ID 必须引用一个私密选项卡,即你不能将非私密选项卡移动到私密窗口。

left 可选

integer。新窗口距屏幕左侧边缘的位置(以像素为单位)。如果未指定,则新窗口将从最后一个处于焦点的窗口自然偏移。此值对面板无效。(在 Firefox 中,此值目前对弹出窗口无效(错误 1271047),但可以使用 browser.windows.update() 设置。)

state 可选

一个 windows.WindowState 值。窗口的初始状态。minimizedmaximizedfullscreen 状态不能与 lefttopwidthheight 结合使用。

tabId 可选

integer。如果包含,则将指定 ID 的选项卡从现有窗口移动到新窗口。

titlePreface 可选

string。使用此选项将字符串添加到浏览器窗口标题的开头。根据底层操作系统,这可能无法在没有标题的浏览器窗口(例如 Firefox 中的 about:blank)上使用。

top 可选

integer。新窗口距屏幕顶部的距离(以像素为单位)。如果未指定,则新窗口将从最后一个处于焦点的窗口自然偏移。此值对面板无效。(在 Firefox 中,此值目前对弹出窗口无效(错误 1271047),但可以使用 browser.windows.update() 设置。)

type 可选

一个 windows.CreateType 值。指定要创建的浏览器窗口类型。在此处指定 panelpopup 以打开一个没有正常浏览器 UI(地址栏、工具栏等)的窗口。

url 可选

stringstringarray。要作为窗口中的选项卡打开的 URL 或 URL 数组。完全限定的 URL 必须包含方案(即 http://www.google.com,而不是 www.google.com)。相对 URL 将相对于扩展程序中的当前页面。默认为“新标签页”。

width 可选

integer。新窗口的宽度(以像素为单位),包括框架。如果未指定,则默认为自然宽度。

返回值

一个 Promise,它将使用一个 windows.Window 对象来实现,该对象包含新窗口的详细信息。此 Window 对象将始终设置其 tabs 属性,与从 windows.get() 和类似 API 返回的 Window 对象不同,这些对象仅在传递了 populate 选项时才包含 tabs。如果发生任何错误,则承诺将使用错误消息拒绝。

示例

打开一个包含两个选项卡的窗口

js
function onCreated(windowInfo) {
  console.log(`Created window: ${windowInfo.id}`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

browser.browserAction.onClicked.addListener((tab) => {
  let creating = browser.windows.create({
    url: ["https://mdn.org.cn", "https://addons.mozilla.org"],
  });
  creating.then(onCreated, onError);
});

当用户单击浏览器操作时打开一个窗口,并将当前活动选项卡移动到该窗口

js
function onCreated(windowInfo) {
  console.log(`Created window: ${windowInfo.id}`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

browser.browserAction.onClicked.addListener((tab) => {
  let creating = browser.windows.create({
    tabId: tab.id,
  });
  creating.then(onCreated, onError);
});

打开一个小型面板样式窗口,并将本地打包的文件加载到其中

js
function onCreated(windowInfo) {
  console.log(`Created window: ${windowInfo.id}`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

browser.browserAction.onClicked.addListener((tab) => {
  let popupURL = browser.extension.getURL("popup/popup.html");

  let creating = browser.windows.create({
    url: popupURL,
    type: "popup",
    height: 200,
    width: 200,
  });
  creating.then(onCreated, onError);
});

示例扩展

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。

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

另请参阅