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 108 及更早版本中,此参数对 panelpopup 窗口类型无效;可以使用 windows.update() 来定位窗口作为一种解决方法。)

state 可选

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

tabId 可选

integer。如果包含,则将指定 ID 的标签页从现有窗口移动到新窗口。

titlePreface 可选

string。使用此参数将一个字符串添加到浏览器窗口标题的前面。根据底层操作系统,这可能不适用于没有标题的浏览器窗口(例如 Firefox 中的 about:blank)。

top 可选

integer。新窗口距离屏幕顶部的像素位置。如果未指定,则新窗口会自然地相对于最后一个获得焦点的窗口偏移。(在 Firefox 108 及更早版本中,此参数对 panelpopup 窗口类型无效;可以使用 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)。如果发生任何错误,Promise 将以错误消息被拒绝。

示例

打开一个包含两个标签页的窗口

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);
});

扩展程序示例

浏览器兼容性

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

另见