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.club.tw", "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

另見