windows.create()

创建一个新的窗口。

当你创建一个窗口时,你可以:

  • 加载一个或多个新的标签页到该窗口中。
  • 将一个现有窗口的标签页移动到新的窗口中
  • 设置窗口的大小和位置
  • 创建一个“面板”样式(没有任何浏览器 UI(如地址栏、工具栏等))的窗口。
  • 设置窗口的多种属性,如获得焦点或设为隐私窗口。

这是一个返回 Promise 的异步函数。

语法

js
let creating = browser.windows.create(
  createData            // 可选对象
)

参数

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 可选

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

width 可选

integer。新窗口的宽度,包含框架。如果未指定,则默认使用固有宽度。

返回值

一个 Promise,其会兑现包含新窗口细节的 windows.Window 对象。该 Window 兑现将总是包含其 tabs 属性集,而不像 windows.get() 和类似的 API 返回的窗口对象那样只在传递了 populate 选项时才会包含 tabs。如果发生了错误则该 promise 将以错误消息拒绝。

示例

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

js
function onCreated(windowInfo) {
  console.log(`已创建窗口:${windowInfo.id}`);
}

function onError(error) {
  console.log(`发生错误:${error}`);
}

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

当用户点击浏览器操作时将打开一个窗口,并且将当前活跃的标签页移动至新窗口中:

js
function onCreated(windowInfo) {
  console.log(`已创建窗口:${windowInfo.id}`);
}

function onError(error) {
  console.log(`发生错误:${error}`);
}

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

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

js
function onCreated(windowInfo) {
  console.log(`已创建窗口:${windowInfo.id}`);
}

function onError(error) {
  console.log(`发生错误:${error}`);
}

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

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

示例扩展

浏览器兼容性

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

参见