跳到主要内容

BrowserWindow

创建和控制浏览器窗口。

进程:主进程

此模块必须在 app 模块的 ready 事件触发后才能使用。

// In the main process.
const { BrowserWindow } = require('electron')

const win = new BrowserWindow({ width: 800, height: 600 })

// Load a remote URL
win.loadURL('https://github.com')

// Or load a local HTML file
win.loadFile('index.html')

窗口自定义

BrowserWindow 类提供了多种方式来修改应用程序窗口的外观和行为。 有关更多详细信息,请参阅窗口自定义教程。

平滑显示窗口

当直接在窗口中加载页面时,用户可能会看到页面逐步加载,这对原生应用来说不是一个好的体验。 为了让窗口显示时没有视觉闪烁,针对不同情况有两种解决方案。

使用 ready-to-show 事件

在加载页面时,如果窗口尚未显示,当渲染进程首次渲染页面时将触发 ready-to-show 事件。 在此事件之后显示窗口将不会有视觉闪烁。

const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ show: false })
win.once('ready-to-show', () => {
win.show()
})

此事件通常在 did-finish-load 事件之后触发,但对于有许多远程资源的页面,它可能在 did-finish-load 事件之前触发。

请注意,使用此事件意味着渲染器将被视为“可见”并进行绘制,即使 show 为 false。 如果您使用 paintWhenInitiallyHidden: false,此事件将永远不会触发。

设置 backgroundColor 属性

对于复杂的应用,ready-to-show 事件可能会触发得太晚,导致应用感觉很慢。 在这种情况下,建议立即显示窗口,并使用接近您应用背景的 backgroundColor

const { BrowserWindow } = require('electron')

const win = new BrowserWindow({ backgroundColor: '#2e2c29' })
win.loadURL('https://github.com')

请注意,即使对于使用 ready-to-show 事件的应用,仍然建议设置 backgroundColor 以使应用感觉更原生。

backgroundColor 的有效值示例包括:

const win = new BrowserWindow()
win.setBackgroundColor('hsl(230, 100%, 50%)')
win.setBackgroundColor('rgb(255, 145, 145)')
win.setBackgroundColor('#ff00a3')
win.setBackgroundColor('blueviolet')

有关这些颜色类型的更多信息,请参阅 win.setBackgroundColor 中的有效选项。

父子窗口

通过使用 parent 选项,您可以创建子窗口:

const { BrowserWindow } = require('electron')

const top = new BrowserWindow()
const child = new BrowserWindow({ parent: top })
child.show()
top.show()

窗口将始终显示在窗口的上方。

模态窗口是禁用父窗口的子窗口。 要创建模态窗口,您必须同时设置 parentmodal 选项:

const { BrowserWindow } = require('electron')

const top = new BrowserWindow()
const child = new BrowserWindow({ parent: top, modal: true, show: false })
child.loadURL('https://github.com')
child.once('ready-to-show', () => {
child.show()
})

页面可见性

页面可见性 API 的工作原理如下:

  • 在所有平台上,可见性状态跟踪窗口是否隐藏/最小化。
  • 此外,在 macOS 上,可见性状态还跟踪窗口的遮挡状态。 如果窗口被另一个窗口遮挡 (即完全覆盖),则可见性状态将为 hidden。 在其他平台上,仅当窗口最小化或通过 win.hide() 明确隐藏时,可见性状态才会为 hidden
  • 如果使用 show: false 创建 BrowserWindow,即使窗口实际处于隐藏状态,初始可见性状态也将为 visible
  • 如果禁用 backgroundThrottling,即使窗口被最小化、遮挡或隐藏,可见性状态也将保持 visible

建议您在可见性状态为 hidden 时暂停耗费资源的操作,以最大程度地降低功耗。

平台注意事项

  • 在 macOS 上,模态窗口将作为附在父窗口上的表单显示。
  • 在 macOS 上,当父窗口移动时,子窗口将保持与父窗口的相对位置,而在 Windows 和 Linux 上,子窗口将不会移动。
  • 在 Linux 上,模态窗口的类型将更改为 dialog
  • 在 Linux 上,许多桌面环境不支持隐藏模态窗口。

类:BrowserWindow 继承自 BaseWindow

创建和控制浏览器窗口。

进程:主进程

BrowserWindow 是一个 EventEmitter

它创建一个新的 BrowserWindow,并根据 options 设置原生属性。

警告

Electron 的内置类不能在用户代码中进行子类化。 有关更多信息,请参阅 常见问题

new BrowserWindow([options])

  • options BrowserWindowConstructorOptions (可选)
    • webPreferences WebPreferences (可选) - 网页功能的设置。
      • devTools boolean (可选) - 是否启用 DevTools。如果设置为 false,则无法使用 BrowserWindow.webContents.openDevTools() 打开 DevTools。默认为 true
      • nodeIntegration boolean (可选) - 是否启用 Node.js 集成。默认为 false
      • nodeIntegrationInWorker boolean (可选) - 是否在 Web Worker 中启用 Node.js 集成。默认为 false。 更多相关信息请参阅多线程
      • nodeIntegrationInSubFrames boolean (可选) - 在子框架 (如 iframe 和子窗口) 中启用 Node.js 支持的实验性选项。 您所有的预加载脚本都将为每个 iframe 加载,您可以使用 process.isMainFrame 来判断您是否在主框架中。
      • preload string (可选) - 指定一个将在页面中其他脚本运行前加载的脚本。 无论 Node.js 集成是否开启,此脚本始终有权访问 Node.js API。 该值应该是脚本的绝对文件路径。 当 Node.js 集成关闭时,预加载脚本可以将 Node.js 全局符号重新引入全局作用域。 请参阅此处的示例。
      • sandbox boolean (可选) - 如果设置,这将沙盒化与窗口关联的渲染器,使其与 Chromium 操作系统级别的沙盒兼容并禁用 Node.js 引擎。 这与 nodeIntegration 选项不同,预加载脚本可用的 API 更受限制。 在此处阅读有关此选项的更多信息。
      • session Session (可选) - 设置页面使用的会话。 您可以选择不直接传递 Session 对象,而是使用 partition 选项,它接受一个分区字符串。 当同时提供 sessionpartition 时,将优先使用 session。 默认为默认会话。
      • partition string (可选) - 根据会话的分区字符串设置页面使用的会话。 如果 partitionpersist: 开头,则页面将使用一个持久会话,该会话对应用程序中所有具有相同 partition 的页面可用。 如果没有 persist: 前缀,页面将使用内存会话。 通过分配相同的 partition,多个页面可以共享相同的会话。 默认为默认会话。
      • zoomFactor number (可选) - 页面默认缩放因子,3.0 代表 300%。默认为 1.0
      • javascript boolean (可选) - 启用 JavaScript 支持。默认为 true
      • webSecurity boolean (可选) - 当 false 时,它将禁用同源策略 (通常用于人们测试网站),如果用户未设置此选项,则将 allowRunningInsecureContent 设置为 true。 默认为 true
      • allowRunningInsecureContent boolean (可选) - 允许 HTTPS 页面运行来自 HTTP URL 的 JavaScript、CSS 或插件。 默认为 false
      • images boolean (可选) - 启用图像支持。默认为 true
      • imageAnimationPolicy string (可选) - 指定如何运行图像动画 (例如 GIF)。 可以是 animateanimateOncenoAnimation。 默认为 animate
      • textAreasAreResizable boolean (可选) - 使 TextArea 元素可调整大小。 默认为 true
      • webgl boolean (可选) - 启用 WebGL 支持。默认为 true
      • plugins boolean (可选) - 是否应启用插件。 默认为 false
      • experimentalFeatures boolean (可选) - 启用 Chromium 的实验性功能。 默认为 false
      • scrollBounce boolean (可选) macOS - 在 macOS 上启用滚动回弹 (弹性拉伸) 效果。 默认为 false
      • enableBlinkFeatures string (可选) - 以 , 分隔的功能字符串列表,例如 CSSVariables,KeyboardEventKey 以启用。 支持的功能字符串的完整列表可在 RuntimeEnabledFeatures.json5 文件中找到。
      • disableBlinkFeatures string (可选) - 以 , 分隔的功能字符串列表,例如 CSSVariables,KeyboardEventKey 以禁用。 支持的功能字符串的完整列表可在 RuntimeEnabledFeatures.json5 文件中找到。
      • defaultFontFamily Object (可选) - 设置字体系列的默认字体。
        • standard string (可选) - 默认为 Times New Roman
        • serif string (可选) - 默认为 Times New Roman
        • sansSerif string (可选) - 默认为 Arial
        • monospace string (可选) - 默认为 Courier New
        • cursive string (可选) - 默认为 Script
        • fantasy string (可选) - 默认为 Impact
        • math string (可选) - 默认为 Latin Modern Math
      • defaultFontSize Integer (可选) - 默认为 16
      • defaultMonospaceFontSize Integer (可选) - 默认为 13
      • minimumFontSize Integer (可选) - 默认为 0
      • defaultEncoding string (可选) - 默认为 ISO-8859-1
      • backgroundThrottling boolean (可选) - 页面进入后台时是否限制动画和计时器。 这也会影响 页面可见性 API。 当单个 browserWindow 中显示的至少一个 webContents 禁用了 backgroundThrottling 时,整个窗口和其显示的其他 webContents 都将绘制并交换帧。 默认为 true
      • offscreen Object | boolean (可选) - 是否为浏览器窗口启用离屏渲染。 默认为 false。 有关更多详细信息,请参阅离屏渲染教程
        • useSharedTexture boolean (可选) 实验性 - 是否使用 GPU 共享纹理进行加速绘制事件。 默认为 false。 有关更多详细信息,请参阅离屏渲染教程
      • contextIsolation boolean (可选) - 是否在单独的 JavaScript 上下文中运行 Electron API 和指定的 preload 脚本。 默认为 truepreload 脚本运行的上下文将只拥有自己专用的 documentwindow 全局对象,以及自己的一组 JavaScript 内置对象 (ArrayObjectJSON 等),所有这些对于加载的内容都是不可见的。 Electron API 将只在 preload 脚本中可用,而不在加载的页面中可用。 当加载可能不受信任的远程内容时,应使用此选项,以确保加载的内容不能篡改 preload 脚本和任何正在使用的 Electron API。 此选项使用与 Chrome 内容脚本 相同的技术。 您可以通过在控制台选项卡顶部的组合框中选择“Electron Isolated Context”条目来在开发者工具中访问此上下文。
      • webviewTag boolean (可选) - 是否启用 <webview> 标签。 默认为 false注意:<webview> 配置的 preload 脚本在执行时将启用 Node.js 集成,因此您应该确保远程/不受信任的内容不能创建带有潜在恶意 preload 脚本的 <webview> 标签。 您可以使用 webContents 上的 will-attach-webview 事件来移除 preload 脚本并验证或修改 <webview> 的初始设置。
      • additionalArguments string[] (可选) - 将附加到此应用程序渲染进程的 process.argv 的字符串列表。 有助于将少量数据传递给渲染进程预加载脚本。
      • safeDialogs boolean (可选) - 是否启用浏览器风格的连续对话框保护。 默认为 false
      • safeDialogsMessage string (可选) - 触发连续对话框保护时显示的消息。 如果未定义,将使用默认消息,请注意当前默认消息是英文且未本地化。
      • disableDialogs boolean (可选) - 是否完全禁用对话框。 覆盖 safeDialogs。 默认为 false
      • navigateOnDragDrop boolean (可选) - 将文件或链接拖放到页面上是否会导致导航。 默认为 false
      • autoplayPolicy string (可选) - 适用于窗口内容的自动播放策略,可以是 no-user-gesture-requireduser-gesture-requireddocument-user-activation-required。 默认为 no-user-gesture-required
      • disableHtmlFullscreenWindowResize boolean (可选) - 进入 HTML 全屏时是否阻止窗口调整大小。 默认为 false
      • accessibleTitle string (可选) - 仅提供给屏幕阅读器等辅助工具的替代标题字符串。 此字符串用户不可见。
      • spellcheck boolean (可选) - 是否启用内置拼写检查器。 默认为 true
      • enableWebSQL boolean (可选) - 是否启用 WebSQL API。 默认为 true
      • v8CacheOptions string (可选) - 强制 blink 使用的 v8 代码缓存策略。 接受的值为:
        • none - 禁用代码缓存
        • code - 基于启发式的代码缓存
        • bypassHeatCheck - 绕过代码缓存启发式,但采用惰性编译
        • bypassHeatCheckAndEagerCompile - 与上述相同,但编译是急切的。 默认策略是 code
      • enablePreferredSizeMode boolean (可选) - 是否启用首选大小模式。 首选大小是包含文档布局所需的最小尺寸——无需滚动。 启用此功能将导致在首选大小更改时,WebContents 上触发 preferred-size-changed 事件。 默认为 false
      • transparent boolean (可选) - 是否为访客页面启用背景透明。 默认为 true注意: 访客页面的文本和背景颜色派生自其根元素的配色方案。 启用透明后,文本颜色仍将相应更改,但背景将保持透明。
      • enableDeprecatedPaste boolean (可选) 已弃用 - 是否启用 paste execCommand。 默认为 false
      • enableCornerSmoothingCSS boolean (可选) 实验性 - 是否启用 -electron-corner-smoothing CSS 规则。 默认为 true
    • paintWhenInitiallyHidden boolean (可选) - 当 showfalse 且渲染器刚创建时,它是否应该处于活动状态。 为了让 document.visibilityState 在首次加载时与 show: false 正确配合,您应该将其设置为 false。 将其设置为 false 将导致 ready-to-show 事件不触发。 默认为 true

实例事件

new BrowserWindow 创建的对象触发以下事件:

注意

某些事件仅在特定操作系统上可用并已进行标记。

事件:'page-title-updated'

返回

  • event Event
  • title string
  • explicitSet boolean

当文档标题改变时触发,调用 event.preventDefault() 将阻止原生窗口的标题改变。当标题是从文件 URL 合成时,explicitSet 为 false。

事件:'close'

返回

  • event Event

当窗口即将关闭时触发。 它在 DOM 的 beforeunloadunload 事件之前触发。 调用 event.preventDefault() 将取消关闭。

通常您会希望使用 beforeunload 处理程序来决定窗口是否应该关闭,当窗口重新加载时也会调用它。 在 Electron 中,返回除 undefined 以外的任何值都将取消关闭。 例如:

window.onbeforeunload = (e) => {
console.log('I do not want to be closed')

// Unlike usual browsers that a message box will be prompted to users, returning
// a non-void value will silently cancel the close.
// It is recommended to use the dialog API to let the user confirm closing the
// application.
e.returnValue = false
}
注意

window.onbeforeunload = handlerwindow.addEventListener('beforeunload', handler) 的行为之间存在细微差别。 建议始终明确设置 event.returnValue,而不是只返回值,因为前者在 Electron 中工作更一致。

事件:'closed'

当窗口关闭时触发。 收到此事件后,您应移除对窗口的引用,并避免再使用它。

事件:'query-session-end' Windows

返回

当会话因关机、机器重启或用户注销而即将结束时触发。 调用 event.preventDefault() 可以延迟系统关机,但通常最好尊重用户结束会话的选择。 但是,如果结束会话会使用户面临数据丢失的风险,您可以选择使用它。

事件:'session-end' Windows

返回

当会话因关机、机器重启或用户注销而即将结束时触发。 一旦此事件触发,就无法阻止会话结束。

事件:'unresponsive'

当网页无响应时触发。

事件:'responsive'

当无响应的网页再次变得有响应时触发。

事件:'blur'

当窗口失去焦点时触发。

事件:'focus'

当窗口获得焦点时触发。

事件:'show'

当窗口显示时触发。

事件:'hide'

当窗口隐藏时触发。

事件:'ready-to-show'

当网页已被渲染 (但尚未显示) 并且窗口可以无视觉闪烁地显示时触发。

请注意,使用此事件意味着渲染器将被视为“可见”并进行绘制,即使 show 为 false。 如果您使用 paintWhenInitiallyHidden: false,此事件将永远不会触发。

事件:'maximize'

当窗口最大化时触发。

事件:'unmaximize'

当窗口从最大化状态退出时触发。

事件:'minimize'

当窗口最小化时触发。

事件:'restore'

当窗口从最小化状态恢复时触发。

事件:'will-resize' macOS Windows

返回

  • event Event
  • newBounds Rectangle - 窗口正在调整到的尺寸。
  • details Object
    • edge (string) - 正在拖动以调整大小的窗口边缘。 可以是 bottomleftrighttop-lefttop-rightbottom-leftbottom-right

在窗口调整大小之前触发。 调用 event.preventDefault() 将阻止窗口调整大小。

请注意,此事件仅在手动调整窗口大小时触发。 使用 setBounds/setSize 调整窗口大小不会触发此事件。

edge 选项的可能值和行为取决于平台。 可能的值为:

  • 在 Windows 上,可能的值是 bottomtopleftrighttop-lefttop-rightbottom-leftbottom-right
  • 在 macOS 上,可能的值是 bottomright
    • bottom 用于表示垂直调整大小。
    • right 用于表示水平调整大小。

事件:'resize'

窗口调整大小后触发。

事件:'resized' macOS Windows

当窗口完成大小调整后触发一次。

这通常在手动调整窗口大小时触发。 在 macOS 上,使用 setBounds/setSize 调整窗口大小并将 animate 参数设置为 true,也会在调整大小完成后触发此事件。

事件:'will-move' macOS Windows

返回

  • event Event
  • newBounds Rectangle - 窗口正在移动到的位置。

在窗口移动之前触发。 在 Windows 上,调用 event.preventDefault() 将阻止窗口移动。

请注意,此事件仅在手动移动窗口时触发。 使用 setPosition/setBounds/center 移动窗口不会触发此事件。

事件:'move'

当窗口移动到新位置时触发。

事件:'moved' macOS Windows

当窗口移动到新位置时触发一次。

注意

在 macOS 上,此事件是 move 的别名。

事件:'enter-full-screen'

当窗口进入全屏状态时触发。

事件:'leave-full-screen'

当窗口离开全屏状态时触发。

事件:'enter-html-full-screen'

当窗口进入由 HTML API 触发的全屏状态时触发。

事件:'leave-html-full-screen'

当窗口离开由 HTML API 触发的全屏状态时触发。

事件:'always-on-top-changed'

返回

  • event Event
  • isAlwaysOnTop boolean

当窗口设置为或取消设置为始终置于其他窗口之上时触发。

事件:'app-command' Windows Linux

返回

  • event Event
  • command string

当调用 App Command 时触发。 这些通常与键盘媒体键或浏览器命令相关,也包括 Windows 上某些鼠标内置的“后退”按钮。

命令是小写字母,下划线替换为连字符,并去除 APPCOMMAND_ 前缀。 例如 APPCOMMAND_BROWSER_BACKWARD 作为 browser-backward 触发。

const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
win.on('app-command', (e, cmd) => {
// Navigate the window back when the user hits their mouse back button
if (cmd === 'browser-backward' && win.webContents.canGoBack()) {
win.webContents.goBack()
}
})

Linux 上明确支持以下应用命令:

  • browser-backward
  • browser-forward

事件:'swipe' macOS

返回

  • event Event
  • direction string

在三指轻扫时触发。 可能的方向是 uprightdownleft

此事件的基础方法旨在处理旧版 macOS 风格的触控板轻扫,即屏幕上的内容不随轻扫而移动。 大多数 macOS 触控板现在不再配置为允许这种轻扫,因此为了使其正常触发,必须将 System Preferences > Trackpad > More Gestures 中的“在页面之间轻扫”偏好设置设置为“用两指或三指轻扫”。

事件:'rotate-gesture' macOS

返回

  • event Event
  • rotation Float

在触控板旋转手势时触发。 持续触发直到旋转手势结束。 每次触发时的 rotation 值是自上次触发以来旋转的角度 (以度为单位)。 旋转手势的最后一次触发事件的值始终为 0。 逆时针旋转值为正,顺时针旋转值为负。

事件:'sheet-begin' macOS

当窗口打开一个表单时触发。

事件:'sheet-end' macOS

当窗口关闭一个表单时触发。

事件:'new-window-for-tab' macOS

当点击原生新标签页按钮时触发。

事件:'system-context-menu' Windows Linux

返回

  • event Event
  • point Point - 触发上下文菜单的屏幕坐标。

当在窗口上触发系统上下文菜单时触发,这通常仅在用户右键单击窗口的非客户区时触发。 这指的是窗口标题栏或在无边框窗口中您声明为 -webkit-app-region: drag 的任何区域。

调用 event.preventDefault() 将阻止菜单显示。

要将 point 转换为 DIP,请使用 screen.screenToDipPoint(point)

静态方法

BrowserWindow 类有以下静态方法:

BrowserWindow.getAllWindows()

返回 BrowserWindow[] - 所有已打开的浏览器窗口的数组。

BrowserWindow.getFocusedWindow()

返回 BrowserWindow | null - 此应用程序中获得焦点的窗口,否则返回 null

BrowserWindow.fromWebContents(webContents)

返回 BrowserWindow | null - 拥有给定 webContents 的窗口,如果内容不属于任何窗口,则返回 null

BrowserWindow.fromBrowserView(browserView) 已弃用

注意

BrowserView 类已弃用,并由新的 WebContentsView 类取代。

返回 BrowserWindow | null - 拥有给定 browserView 的窗口。 如果给定视图未附加到任何窗口,则返回 null

BrowserWindow.fromId(id)

  • id Integer

返回 BrowserWindow | null - 具有给定 id 的窗口。

实例属性

使用 new BrowserWindow 创建的对象具有以下属性:

const { BrowserWindow } = require('electron')
// In this example `win` is our instance
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('https://github.com')

win.webContents 只读

此窗口拥有的 WebContents 对象。 所有与网页相关的事件和操作都将通过它完成。

有关其方法和事件,请参阅 webContents 文档

win.id 只读

一个 Integer 属性,表示窗口的唯一 ID。 每个 ID 在整个 Electron 应用程序的所有 BrowserWindow 实例中都是唯一的。

win.tabbingIdentifier macOS 只读

一个 string (可选) 属性,它等于传递给 BrowserWindow 构造函数的 tabbingIdentifier,如果未设置则为 undefined

win.autoHideMenuBar Linux Windows

一个 boolean 属性,它决定窗口菜单栏是否应该自动隐藏。 设置后,菜单栏只会在用户按下单个 Alt 键时显示。

如果菜单栏已经可见,将此属性设置为 true 不会立即隐藏它。

win.simpleFullScreen

一个 boolean 属性,它决定窗口是否处于简单 (Lion 之前) 全屏模式。

win.fullScreen

一个 boolean 属性,它决定窗口是否处于全屏模式。

win.focusable Windows macOS

一个 boolean 属性,它决定窗口是否可聚焦。

win.visibleOnAllWorkspaces macOS Linux

一个 boolean 属性,它决定窗口是否在所有工作区可见。

注意

在 Windows 上始终返回 false。

win.shadow

一个 boolean 属性,它决定窗口是否有阴影。

win.menuBarVisible Windows Linux

一个 boolean 属性,它决定菜单栏是否应该可见。

注意

如果菜单栏是自动隐藏的,用户仍然可以通过按下单个 Alt 键来调出菜单栏。

win.kiosk

一个 boolean 属性,它决定窗口是否处于信息亭模式。

win.documentEdited macOS

一个 boolean 属性,它指定窗口的文档是否已被编辑。

当设置为 true 时,标题栏中的图标将变为灰色。

win.representedFilename macOS

一个 string 属性,它决定窗口所代表的文件路径名,并且文件图标将显示在窗口的标题栏中。

win.title

一个 string 属性,它决定原生窗口的标题。

注意

网页的标题可以与原生窗口的标题不同。

win.minimizable macOS Windows

一个 boolean 属性,它决定用户是否可以手动最小化窗口。

在 Linux 上,setter 是一个空操作,尽管 getter 返回 true

win.maximizable macOS Windows

一个 boolean 属性,它决定用户是否可以手动最大化窗口。

在 Linux 上,setter 是一个空操作,尽管 getter 返回 true

win.fullScreenable

一个 boolean 属性,它决定最大化/缩放窗口按钮是切换全屏模式还是最大化窗口。

win.resizable

一个 boolean 属性,它决定用户是否可以手动调整窗口大小。

win.closable macOS Windows

一个 boolean 属性,它决定用户是否可以手动关闭窗口。

在 Linux 上,setter 是一个空操作,尽管 getter 返回 true

win.movable macOS Windows

一个 boolean 属性,它决定用户是否可以移动窗口。

在 Linux 上,setter 是一个空操作,尽管 getter 返回 true

win.excludedFromShownWindowsMenu macOS

一个 boolean 属性,它决定窗口是否从应用程序的“窗口”菜单中排除。 默认为 false

const win = new BrowserWindow({ height: 600, width: 600 })

const template = [
{
role: 'windowmenu'
}
]

win.excludedFromShownWindowsMenu = true

const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)

win.accessibleTitle

一个 string 属性,它定义了一个仅提供给屏幕阅读器等辅助工具的替代标题。 此字符串用户不可直接见。

win.snapped Windows 只读

一个 boolean 属性,它指示窗口是否通过 对齐窗口 进行排列。

实例方法

使用 new BrowserWindow 创建的对象具有以下实例方法:

注意

某些方法仅在特定操作系统上可用并已进行标记。

win.destroy()

强制关闭窗口,网页的 unloadbeforeunload 事件将不会触发,此窗口的 close 事件也不会触发,但它保证 closed 事件会触发。

win.close()

尝试关闭窗口。 这与用户手动单击窗口的关闭按钮效果相同。 但网页可能会取消关闭。 请参阅close 事件

win.focus()

聚焦于窗口。

win.blur()

从窗口移除焦点。

win.isFocused()

返回 boolean - 窗口是否处于焦点状态。

win.isDestroyed()

返回 boolean - 窗口是否已被销毁。

win.show()

显示并聚焦于窗口。

win.showInactive()

显示窗口但不聚焦于它。

win.hide()

隐藏窗口。

win.isVisible()

返回 boolean - 窗口在应用程序前台对用户是否可见。

win.isModal()

返回 boolean - 当前窗口是否为模态窗口。

win.maximize()

最大化窗口。 如果窗口尚未显示,此操作也会显示 (但不聚焦) 窗口。

win.unmaximize()

取消最大化窗口。

win.isMaximized()

返回 boolean - 窗口是否已最大化。

win.minimize()

最小化窗口。 在某些平台上,最小化后的窗口将显示在 Dock 中。

win.restore()

将窗口从最小化状态恢复到其之前的状态。

win.isMinimized()

返回 boolean - 窗口是否已最小化。

win.setFullScreen(flag)

  • flag boolean

设置窗口是否应处于全屏模式。

注意

在 macOS 上,全屏转换是异步进行的。 如果后续操作依赖于全屏状态,请使用 'enter-full-screen''leave-full-screen' 事件。

win.isFullScreen()

返回 boolean - 窗口是否处于全屏模式。

注意

在 macOS 上,全屏转换是异步进行的。 在查询 BrowserWindow 的全屏状态时,您应该确保 'enter-full-screen''leave-full-screen' 事件已经触发。

win.setSimpleFullScreen(flag) macOS

  • flag boolean

进入或退出简单全屏模式。

简单全屏模式模拟了 macOS Lion (10.7) 之前版本中原生的全屏行为。

win.isSimpleFullScreen() macOS

返回 boolean - 窗口是否处于简单 (Lion 之前) 全屏模式。

win.isNormal()

返回 boolean - 窗口是否处于正常状态 (未最大化、未最小化、未处于全屏模式)。

win.setAspectRatio(aspectRatio[, extraSize])

  • aspectRatio Float - 内容视图部分要保持的宽高比。
  • extraSize Size (可选) macOS - 在保持宽高比时不包括的额外大小。

这将使窗口保持宽高比。 额外大小允许开发者拥有不包含在宽高比计算中的空间 (以像素为单位)。 此 API 已经考虑了窗口大小和其内容大小之间的差异。

考虑一个带有高清视频播放器和相关控件的普通窗口。 也许在左边缘有 15 像素的控件,右边缘有 25 像素的控件,播放器下方有 50 像素的控件。 为了在播放器本身内保持 16:9 的宽高比 (高清标准宽高比 @1920x1080),我们将使用 16/9 和 { width: 40, height: 50 } 作为参数调用此函数。 第二个参数不关心内容视图中的额外宽度和高度在哪里——只关心它们是否存在。 将内容视图中的所有额外宽度和高度区域相加。

当使用 win.setSize 等 API 以编程方式调整窗口大小时,宽高比将不被遵守。

要重置宽高比,请将 aspectRatio 值设置为 0:win.setAspectRatio(0)

win.setBackgroundColor(backgroundColor)

  • backgroundColor string - 十六进制、RGB、RGBA、HSL、HSLA 或命名 CSS 颜色格式的颜色。 十六进制类型可以省略 alpha 通道。

有效 backgroundColor 值的示例

  • 十六进制
    • #fff(RGB 缩写)
    • #ffff(ARGB 缩写)
    • #ffffff(RGB)
    • #ffffffff(ARGB)
  • RGB
    • rgb\(([\d]+),\s*([\d]+),\s*([\d]+)\)
      • 例如 rgb(255, 255, 255)
  • RGBA
    • rgba\(([\d]+),\s*([\d]+),\s*([\d]+),\s*([\d.]+)\)
      • 例如 rgba(255, 255, 255, 1.0)
  • HSL
    • hsl\((-?[\d.]+),\s*([\d.]+)%,\s*([\d.]+)%\)
      • 例如 hsl(200, 20%, 50%)
  • HSLA
    • hsla\((-?[\d.]+),\s*([\d.]+)%,\s*([\d.]+)%,\s*([\d.]+)\)
      • 例如 hsla(200, 20%, 50%, 0.5)
  • 颜色名称
    • 选项列在 SkParseColor.cpp
    • 类似于 CSS Color Module Level 3 关键字,但区分大小写。
      • 例如 bluevioletred

设置窗口的背景颜色。请参阅 设置 backgroundColor

win.previewFile(path[, displayName]) macOS

  • path 字符串 - 使用 QuickLook 预览的文件的绝对路径。这很重要,因为 Quick Look 使用路径上的文件名和文件扩展名来确定要打开的文件内容类型。
  • displayName 字符串 (可选) - 在 Quick Look 模态视图中显示的文件名。这纯粹是视觉上的,不影响文件内容类型。默认为 path

使用 Quick Look 预览给定路径的文件。

win.closeFilePreview() macOS

关闭当前打开的 Quick Look 面板。

win.setBounds(bounds[, animate])

  • bounds Partial<Rectangle>
  • animate 布尔值 (可选) macOS

调整窗口大小并将其移动到提供的边界。任何未提供的属性将默认为其当前值。

const { BrowserWindow } = require('electron')
const win = new BrowserWindow()

// set all bounds properties
win.setBounds({ x: 440, y: 225, width: 800, height: 600 })

// set a single bounds property
win.setBounds({ width: 100 })

// { x: 440, y: 225, width: 100, height: 600 }
console.log(win.getBounds())
注意

在 macOS 上,y 坐标值不能小于 任务栏托盘 高度。任务栏托盘高度随时间变化并取决于操作系统,但通常在 20-40px 之间。传递小于任务栏托盘高度的值将导致窗口与任务栏托盘齐平。

win.getBounds()

返回 Rectangle - 窗口的 bounds (边界) 作为 Object

注意

在 macOS 上,返回的 y 坐标值将至少是 任务栏托盘 高度。例如,当任务栏托盘高度为 38 时,调用 win.setBounds({ x: 25, y: 20, width: 800, height: 600 }) 意味着 win.getBounds() 将返回 { x: 25, y: 38, width: 800, height: 600 }

win.getBackgroundColor()

返回 string - 获取窗口的背景颜色,格式为十六进制 (#RRGGBB)。

请参阅 设置 backgroundColor

注意

不会返回透明度 (alpha) 值,只会返回红色、绿色和蓝色值。

win.setContentBounds(bounds[, animate])

  • bounds Rectangle
  • animate 布尔值 (可选) macOS

调整窗口的客户端区域(例如网页)大小并将其移动到提供的边界。

win.getContentBounds()

返回 Rectangle - 窗口客户端区域的 bounds (边界) 作为 Object

win.getNormalBounds()

返回 Rectangle - 包含正常状态下窗口的边界。

注意

无论窗口当前处于何种状态(最大化、最小化或全屏),此函数始终返回窗口在正常状态下的位置和大小。在正常状态下,getBoundsgetNormalBounds 返回相同的 Rectangle

win.setEnabled(enable)

  • enable 布尔值

禁用或启用窗口。

win.isEnabled()

返回 boolean - 窗口是否已启用。

win.setSize(width, height[, animate])

  • width 整数
  • height 整数
  • animate 布尔值 (可选) macOS

将窗口大小调整为 widthheight。如果 widthheight 小于任何设置的最小尺寸限制,窗口将自动调整到其最小尺寸。

win.getSize()

返回 Integer[] - 包含窗口的宽度和高度。

win.setContentSize(width, height[, animate])

  • width 整数
  • height 整数
  • animate 布尔值 (可选) macOS

调整窗口的客户端区域(例如网页)大小为 widthheight

win.getContentSize()

返回 Integer[] - 包含窗口客户端区域的宽度和高度。

win.setMinimumSize(width, height)

  • width 整数
  • height 整数

将窗口的最小尺寸设置为 widthheight

win.getMinimumSize()

返回 Integer[] - 包含窗口的最小宽度和高度。

win.setMaximumSize(width, height)

  • width 整数
  • height 整数

将窗口的最大尺寸设置为 widthheight

win.getMaximumSize()

返回 Integer[] - 包含窗口的最大宽度和高度。

win.setResizable(resizable)

  • resizable 布尔值

设置窗口是否可以由用户手动调整大小。

win.isResizable()

返回 boolean - 窗口是否可以由用户手动调整大小。

win.setMovable(movable) macOS Windows

  • movable 布尔值

设置窗口是否可以由用户移动。在 Linux 上不起作用。

win.isMovable() macOS Windows

返回 boolean - 窗口是否可以由用户移动。

在 Linux 上始终返回 true

win.setMinimizable(minimizable) macOS Windows

  • minimizable 布尔值

设置窗口是否可以由用户手动最小化。在 Linux 上不起作用。

win.isMinimizable() macOS Windows

返回 boolean - 窗口是否可以由用户手动最小化。

在 Linux 上始终返回 true

win.setMaximizable(maximizable) macOS Windows

  • maximizable 布尔值

设置窗口是否可以由用户手动最大化。在 Linux 上不起作用。

win.isMaximizable() macOS Windows

返回 boolean - 窗口是否可以由用户手动最大化。

在 Linux 上始终返回 true

win.setFullScreenable(fullscreenable)

  • fullscreenable 布尔值

设置最大化/缩放窗口按钮是切换全屏模式还是最大化窗口。

win.isFullScreenable()

返回 boolean - 最大化/缩放窗口按钮是切换全屏模式还是最大化窗口。

win.setClosable(closable) macOS Windows

  • closable 布尔值

设置窗口是否可以由用户手动关闭。在 Linux 上不起作用。

win.isClosable() macOS Windows

返回 boolean - 窗口是否可以由用户手动关闭。

在 Linux 上始终返回 true

win.setHiddenInMissionControl(hidden) macOS

  • hidden 布尔值

设置当用户切换到“任务控制”时,窗口是否会被隐藏。

win.isHiddenInMissionControl() macOS

返回 boolean - 当用户切换到“任务控制”时,窗口是否会被隐藏。

win.setAlwaysOnTop(flag[, level][, relativeLevel])

  • flag boolean
  • level 字符串 (可选) macOS Windows - 值包括 normalfloatingtorn-off-menumodal-panelmain-menustatuspop-up-menuscreen-saverdock (已废弃)。当 flag 为 true 时,默认值为 floating。当 flag 为 false 时,level 将重置为 normal。请注意,从 floatingstatus(包括),窗口在 macOS 上位于 Dock 下方,在 Windows 上位于任务栏下方。从 pop-up-menu 到更高的级别,它在 macOS 上显示在 Dock 上方,在 Windows 上显示在任务栏上方。有关更多详细信息,请参阅 macOS 文档
  • relativeLevel 整数 (可选) macOS - 相对于给定 level,将此窗口设置高出多少层。默认值为 0。请注意,Apple 不鼓励将级别设置得比 screen-saver 高 1 以上。

设置窗口是否应始终显示在其他窗口的顶部。设置此项后,窗口仍是普通窗口,而不是无法获得焦点的工具箱窗口。

win.isAlwaysOnTop()

返回 boolean - 窗口是否始终位于其他窗口的顶部。

win.moveAbove(mediaSourceId)

  • mediaSourceId 字符串 - 窗口 ID,格式为 DesktopCapturerSource 的 ID。例如 "window:1869:0"。

将窗口在 Z 轴顺序上移动到源窗口上方。如果 mediaSourceId 不是窗口类型,或者窗口不存在,则此方法会抛出错误。

win.moveTop()

将窗口移动到最顶部 (Z 轴顺序),无论是否获得焦点。

win.center()

将窗口移动到屏幕中心。

win.setPosition(x, y[, animate])

  • x 整数
  • y 整数
  • animate 布尔值 (可选) macOS

将窗口移动到 xy

win.getPosition()

返回 Integer[] - 包含窗口的当前位置。

win.setTitle(title)

  • title string

将原生窗口的标题更改为 title

win.getTitle()

返回 string - 原生窗口的标题。

注意

网页的标题可以与原生窗口的标题不同。

win.setSheetOffset(offsetY[, offsetX]) macOS

  • offsetY 浮点数
  • offsetX 浮点数 (可选)

更改 macOS 上工作表的附加点。默认情况下,工作表附加在窗口框架正下方,但您可能希望将它们显示在 HTML 渲染的工具栏下方。例如

const { BrowserWindow } = require('electron')
const win = new BrowserWindow()

const toolbarRect = document.getElementById('toolbar').getBoundingClientRect()
win.setSheetOffset(toolbarRect.height)

win.flashFrame(flag)

历史
  • flag boolean

开始或停止闪烁窗口以吸引用户注意。

win.setSkipTaskbar(skip) macOS Windows

  • skip 布尔值

使窗口不在任务栏中显示。

win.setKiosk(flag)

  • flag boolean

进入或退出全屏触摸屏模式 (kiosk mode)。

win.isKiosk()

返回 boolean - 窗口是否处于全屏触摸屏模式 (kiosk mode)。

win.isTabletMode() Windows

返回 boolean - 窗口是否处于 Windows 10 平板模式。

由于 Windows 10 用户可以 将他们的 PC 用作平板电脑,在此模式下,应用程序可以选择优化其平板电脑 UI,例如放大标题栏和隐藏标题栏按钮。

此 API 返回窗口是否处于平板模式,并且可以使用 resize 事件监听平板模式的变化。

win.getMediaSourceId()

返回 string - 窗口 ID,格式为 DesktopCapturerSource 的 ID。例如 "window:1324:0"。

更精确的格式是 window:id:other_id,其中 id 在 Windows 上是 HWND,在 macOS 上是 CGWindowID (uint64_t),在 Linux 上是 Window (unsigned long)。other_id 用于识别同一顶级窗口中的 web 内容(标签页)。

win.getNativeWindowHandle()

返回 Buffer - 窗口的平台特定句柄。

该句柄的原生类型在 Windows 上是 HWND,在 macOS 上是 NSView*,在 Linux 上是 Window (unsigned long)。

win.hookWindowMessage(message, callback) Windows

  • message 整数
  • callback 函数
    • wParam Buffer - 提供给 WndProc 的 wParam
    • lParam Buffer - 提供给 WndProc 的 lParam

挂钩 Windows 消息。当 WndProc 接收到消息时,将调用 callback

win.isWindowMessageHooked(message) Windows

  • message 整数

返回 boolean - 根据消息是否被挂钩返回 truefalse

win.unhookWindowMessage(message) Windows

  • message 整数

取消挂钩窗口消息。

win.unhookAllWindowMessages() Windows

取消挂钩所有窗口消息。

win.setRepresentedFilename(filename) macOS

  • filename 字符串

设置窗口所代表的文件路径名,该文件的图标将显示在窗口的标题栏中。

win.getRepresentedFilename() macOS

返回 string - 窗口所代表的文件路径名。

win.setDocumentEdited(edited) macOS

  • edited 布尔值

指定窗口的文档是否已被编辑,当设置为 true 时,标题栏中的图标将变为灰色。

win.isDocumentEdited() macOS

返回 boolean - 窗口的文档是否已被编辑。

win.focusOnWebView()

win.blurWebView()

win.capturePage([rect, opts])

  • rect Rectangle (可选) - 要捕获的边界
  • opts Object (可选)
    • stayHidden 布尔值 (可选) - 保持页面隐藏而不是可见。默认为 false
    • stayAwake 布尔值 (可选) - 保持系统唤醒而不是允许其睡眠。默认为 false

返回 Promise<NativeImage> - 解析为 NativeImage

捕获 rect 内页面的快照。省略 rect 将捕获整个可见页面。如果页面不可见,rect 可能为空。当其浏览器窗口隐藏且捕获器计数非零时,页面被视为可见。如果您希望页面保持隐藏状态,应确保 stayHidden 设置为 true。

win.loadURL(url[, options])

  • url 字符串
  • options Object (可选)
    • httpReferrer (string | Referrer) (可选) - HTTP Referrer URL。
    • userAgent 字符串 (可选) - 发起请求的用户代理。
    • extraHeaders 字符串 (可选) - 由 "\n" 分隔的额外请求头。
    • postData (UploadRawData | UploadFile)[] (可选)
    • baseURLForDataURL 字符串 (可选) - 数据 URL 加载文件的基本 URL(带尾随路径分隔符)。仅当指定的 url 是数据 URL 且需要加载其他文件时才需要此项。

返回 Promise<void> - 当页面完成加载时(参见 did-finish-load),Promise 将解析,如果页面加载失败(参见 did-fail-load),则拒绝。

webContents.loadURL(url[, options]) 相同。

url 可以是远程地址(例如 http://),也可以是使用 file:// 协议的本地 HTML 文件路径。

为确保文件 URL 格式正确,建议使用 Node 的 url.format 方法。

const { BrowserWindow } = require('electron')
const win = new BrowserWindow()

const url = require('url').format({
protocol: 'file',
slashes: true,
pathname: require('node:path').join(__dirname, 'index.html')
})

win.loadURL(url)

您可以通过以下方式使用 POST 请求加载带有 URL 编码数据的 URL:

const { BrowserWindow } = require('electron')
const win = new BrowserWindow()

win.loadURL('https://:8000/post', {
postData: [{
type: 'rawData',
bytes: Buffer.from('hello=world')
}],
extraHeaders: 'Content-Type: application/x-www-form-urlencoded'
})

win.loadFile(filePath[, options])

  • filePath 字符串
  • options Object (可选)
    • query Record<string, string> (可选) - 传递给 url.format()
    • search 字符串 (可选) - 传递给 url.format()
    • hash 字符串 (可选) - 传递给 url.format()

返回 Promise<void> - 当页面完成加载时(参见 did-finish-load),Promise 将解析,如果页面加载失败(参见 did-fail-load),则拒绝。

webContents.loadFile 相同,filePath 应该是相对于应用程序根目录的 HTML 文件路径。有关更多信息,请参阅 webContents 文档。

win.reload()

webContents.reload 相同。

win.setMenu(menu) Linux Windows

  • menu Menu | null

menu 设置为窗口的菜单栏。

win.removeMenu() Linux Windows

移除窗口的菜单栏。

win.setProgressBar(progress[, options])

  • progress 双精度浮点数
  • options Object (可选)
    • mode 字符串 Windows - 进度条的模式。可以是 nonenormalindeterminateerrorpaused

设置进度条中的进度值。有效范围是 [0, 1.0]。

当进度 < 0 时移除进度条;当进度 > 1 时更改为不确定模式。

在 Linux 平台上,仅支持 Unity 桌面环境,您需要在 package.jsondesktopName 字段中指定 *.desktop 文件名。默认情况下,它将假定为 {app.name}.desktop

在 Windows 上,可以传递一个模式。接受的值有 nonenormalindeterminateerrorpaused。如果您调用 setProgressBar 时未设置模式(但值在有效范围内),则将假定为 normal

win.setOverlayIcon(overlay, description) Windows

  • overlay NativeImage | null - 显示在任务栏图标右下角的图标。如果此参数为 null,则清除覆盖层。
  • description 字符串 - 将提供给辅助功能屏幕阅读器的描述。

在当前任务栏图标上设置一个 16 x 16 像素的叠加层,通常用于传达某种应用程序状态或被动通知用户。

win.invalidateShadow() macOS

使窗口阴影失效,以便根据当前窗口形状重新计算。

透明的 BrowserWindows 有时会在 macOS 上留下视觉伪影。此方法可用于在例如执行动画时清除这些伪影。

win.setHasShadow(hasShadow)

  • hasShadow 布尔值

设置窗口是否应有阴影。

win.hasShadow()

返回 boolean - 窗口是否具有阴影。

win.setOpacity(opacity) Windows macOS

  • opacity 数字 - 介于 0.0(完全透明)和 1.0(完全不透明)之间。

设置窗口的不透明度。在 Linux 上不起作用。超出范围的数值将被限制在 [0, 1] 范围内。

win.getOpacity()

返回 number - 介于 0.0(完全透明)和 1.0(完全不透明)之间。在 Linux 上始终返回 1。

win.setShape(rects) Windows Linux 实验性

  • rects Rectangle[] - 在窗口上设置形状。传入空列表将使窗口恢复为矩形。

设置窗口形状决定了系统允许绘图和用户交互的窗口区域。在给定区域之外,将不会绘制任何像素,也不会注册任何鼠标事件。区域外的鼠标事件将不会被该窗口接收,而是会穿透到窗口后面的内容。

win.setThumbarButtons(buttons) Windows

返回 boolean - 按钮是否成功添加。

将指定的一组按钮添加到任务栏按钮布局中窗口的缩略图图像的缩略图工具栏。返回一个 boolean 对象,指示缩略图是否已成功添加。

由于空间限制,缩略图工具栏中的按钮数量不应超过 7 个。一旦设置了缩略图工具栏,由于平台限制,该工具栏无法被移除。但是,您可以调用 API 并传入空数组来清除按钮。

buttonsButton 对象的数组。

  • Button 对象
    • icon NativeImage - 显示在缩略图工具栏中的图标。
    • click 函数
    • tooltip 字符串 (可选) - 按钮工具提示的文本。
    • flags 字符串数组 (可选) - 控制按钮的特定状态和行为。默认情况下,它是 ['enabled']

flags 是一个可以包含以下 string 值的数组。

  • enabled - 按钮处于活动状态,用户可用。
  • disabled - 按钮已禁用。它存在,但具有视觉状态,表明它不会响应用户操作。
  • dismissonclick - 单击按钮时,缩略图窗口立即关闭。
  • nobackground - 不绘制按钮边框,仅使用图像。
  • hidden - 按钮不向用户显示。
  • noninteractive - 按钮已启用但不具有交互性;不绘制按下的按钮状态。此值适用于按钮用于通知的情况。

win.setThumbnailClip(region) Windows

设置窗口区域以显示为在任务栏中悬停在窗口上时显示的缩略图图像。您可以通过指定一个空区域来将缩略图重置为整个窗口:{ x: 0, y: 0, width: 0, height: 0 }

win.setThumbnailToolTip(toolTip) Windows

  • toolTip 字符串

设置当鼠标悬停在任务栏中的窗口缩略图上时显示的工具提示。

win.setAppDetails(options) Windows

  • options 对象
    • appId 字符串 (可选) - 窗口的 App User Model ID。必须设置此项,否则其他选项将不起作用。
    • appIconPath 字符串 (可选) - 窗口的 重新启动图标
    • appIconIndex 整数 (可选) - appIconPath 中图标的索引。未设置 appIconPath 时忽略。默认为 0
    • relaunchCommand 字符串 (可选) - 窗口的 重新启动命令
    • relaunchDisplayName 字符串 (可选) - 窗口的 重新启动显示名称

设置窗口任务栏按钮的属性。

注意

relaunchCommandrelaunchDisplayName 必须始终一起设置。如果其中一个属性未设置,则两者都不会使用。

win.showDefinitionForSelection() macOS

webContents.showDefinitionForSelection() 相同。

win.setIcon(icon) Windows Linux

更改窗口图标。

win.setWindowButtonVisibility(visible) macOS

  • visible 布尔值

设置窗口的红绿灯按钮是否可见。

win.setAutoHideMenuBar(hide) Windows Linux

  • hide 布尔值

设置窗口菜单栏是否应自动隐藏。一旦设置,菜单栏只有在用户按下 Alt 键时才会显示。

如果菜单栏已经可见,调用 setAutoHideMenuBar(true) 不会立即将其隐藏。

win.isMenuBarAutoHide() Windows Linux

返回 boolean - 菜单栏是否自动隐藏。

win.setMenuBarVisibility(visible) Windows Linux

  • visible 布尔值

设置菜单栏是否可见。如果菜单栏是自动隐藏的,用户仍然可以通过按下 Alt 键来调出菜单栏。

win.isMenuBarVisible() Windows Linux

返回 boolean - 菜单栏是否可见。

win.isSnapped() Windows

返回 boolean - 窗口是否通过 分屏辅助 排列。

窗口通过鼠标悬停在窗口最大化按钮上时显示的按钮,或通过将其拖动到屏幕边缘来分屏。

win.setVisibleOnAllWorkspaces(visible[, options]) macOS Linux

  • visible 布尔值
  • options Object (可选)
    • visibleOnFullScreen 布尔值 (可选) macOS - 设置窗口是否应在全屏窗口上方可见。
    • skipTransformProcessType 布尔值 (可选) macOS - 默认情况下,调用 setVisibleOnAllWorkspaces 会在 UIElementApplication 和 ForegroundApplication 之间转换进程类型以确保正确的行为。然而,这会在每次调用时短暂隐藏窗口和 Dock。如果您的窗口已经是 UIElementApplication 类型,您可以通过将 skipTransformProcessType 设置为 true 来绕过此转换。

设置窗口是否应在所有工作区中可见。

注意

此 API 在 Windows 上不起作用。

win.isVisibleOnAllWorkspaces() macOS Linux

返回 boolean - 窗口是否在所有工作区中可见。

注意

此 API 在 Windows 上始终返回 false。

win.setIgnoreMouseEvents(ignore[, options])

  • ignore 布尔值
  • options Object (可选)
    • forward 布尔值 (可选) macOS Windows - 如果为 true,则将鼠标移动消息转发到 Chromium,启用鼠标相关事件,例如 mouseleave。仅当 ignore 为 true 时使用。如果 ignore 为 false,则无论此值如何,转发始终被禁用。

使窗口忽略所有鼠标事件。

发生在此窗口中的所有鼠标事件都将传递给此窗口下方的窗口,但如果此窗口具有焦点,它仍将接收键盘事件。

win.setContentProtection(enable) macOS Windows

  • enable 布尔值

防止窗口内容被其他应用程序捕获。

在 macOS 上,它将 NSWindow 的 sharingType 设置为 NSWindowSharingNone。在 Windows 上,它调用 SetWindowDisplayAffinity 并使用 WDA_EXCLUDEFROMCAPTURE。对于 Windows 10 版本 2004 及更高版本,窗口将完全从捕获中移除,较旧的 Windows 版本表现为应用了 WDA_MONITOR,捕获一个黑色窗口。

win.isContentProtected() macOS Windows

返回 boolean - 内容保护是否当前已启用。

win.setFocusable(focusable) macOS Windows

  • focusable 布尔值

更改窗口是否可以获得焦点。

在 macOS 上,它不会将焦点从窗口中移除。

win.isFocusable() macOS Windows

返回 boolean - 窗口是否可以获得焦点。

win.setParentWindow(parent)

  • parent BrowserWindow | null

parent 设置为当前窗口的父窗口,传入 null 将把当前窗口变为顶级窗口。

win.getParentWindow()

返回 BrowserWindow | null - 父窗口,如果没有父窗口则返回 null

win.getChildWindows()

返回 BrowserWindow[] - 所有子窗口。

win.setAutoHideCursor(autoHide) macOS

  • autoHide 布尔值

控制打字时是否隐藏光标。

win.selectPreviousTab() macOS

当原生标签页启用且窗口中还有其他标签页时,选择上一个标签页。

win.selectNextTab() macOS

当原生标签页启用且窗口中还有其他标签页时,选择下一个标签页。

win.showAllTabs() macOS

当原生标签页启用时,显示或隐藏标签页概览。

win.mergeAllWindows() macOS

当原生标签页启用且有多个打开的窗口时,将所有窗口合并为一个带有多个标签页的窗口。

win.moveTabToNewWindow() macOS

如果原生标签页启用且当前窗口中有多个标签页,则将当前标签页移动到新窗口中。

win.toggleTabBar() macOS

如果原生标签页启用且当前窗口中只有一个标签页,则切换标签栏的可见性。

win.addTabbedWindow(browserWindow) macOS

  • browserWindow BrowserWindow

将一个窗口添加为此窗口的标签页,位于该窗口实例的标签页之后。

win.setVibrancy(type[, options]) macOS

  • type 字符串 | null - 可以是 titlebarselectionmenupopoversidebarheadersheetwindowhudfullscreen-uitooltipcontentunder-windowunder-page。有关更多详细信息,请参阅 macOS 文档
  • options Object (可选)
    • animationDuration 数字 (可选) - 如果大于零,活力效果的变化将在给定持续时间(毫秒)内进行动画处理。

为浏览器窗口添加活力效果。传入 null 或空字符串将移除窗口上的活力效果。animationDuration 参数仅对活力效果的淡入或淡出进行动画处理。不支持在不同类型的活力效果之间进行动画处理。

win.setBackgroundMaterial(material) Windows

  • material 字符串
    • auto - 让桌面窗口管理器 (DWM) 自动决定此窗口的系统绘制背景材料。这是默认值。
    • none - 不绘制任何系统背景。
    • mica - 绘制与长时间运行的窗口相对应的背景材料效果。
    • acrylic - 绘制与瞬时窗口相对应的背景材料效果。
    • tabbed - 绘制与具有标签式标题栏的窗口相对应的背景材料效果。

此方法设置浏览器窗口的系统绘制背景材料,包括非客户端区域后方。

有关更多详细信息,请参阅 Windows 文档

注意

此方法仅在 Windows 11 22H2 及更高版本上受支持。

win.setWindowButtonPosition(position) macOS

为无框窗口中的红绿灯按钮设置自定义位置。传入 null 将把位置重置为默认值。

win.getWindowButtonPosition() macOS

返回 Point | null - 无框窗口中红绿灯按钮的自定义位置,如果没有自定义位置则返回 null

win.setTouchBar(touchBar) macOS

  • touchBar TouchBar | null

为当前窗口设置触控栏布局。指定 nullundefined 将清除触控栏。此方法仅在机器具有触控栏时才有效。

注意

TouchBar API 目前是实验性的,未来 Electron 版本中可能会更改或移除。

win.setBrowserView(browserView) 实验性 已废弃

  • browserView BrowserView | null - 将 browserView 附加到 win。如果已附加其他 BrowserView,它们将从该窗口中移除。
警告

BrowserView 类已弃用,并由新的 WebContentsView 类取代。

win.getBrowserView() 实验性 已废弃

返回 BrowserView | null - 附加到 winBrowserView。如果未附加,则返回 null。如果附加了多个 BrowserView,则抛出错误。

警告

BrowserView 类已弃用,并由新的 WebContentsView 类取代。

win.addBrowserView(browserView) 实验性 已废弃

用于 setBrowserView 的替代 API,支持多浏览器视图工作。

警告

BrowserView 类已弃用,并由新的 WebContentsView 类取代。

win.removeBrowserView(browserView) 实验性 已废弃

警告

BrowserView 类已弃用,并由新的 WebContentsView 类取代。

win.setTopBrowserView(browserView) 实验性 已废弃

browserView 提升到附加到 win 的其他 BrowserView 之上。如果 browserView 未附加到 win,则抛出错误。

警告

BrowserView 类已弃用,并由新的 WebContentsView 类取代。

win.getBrowserViews() 实验性 已废弃

返回 BrowserView[] - 一个按 Z 轴索引排序的所有通过 addBrowserViewsetBrowserView 附加的 BrowserView 数组。最顶层的 BrowserView 是数组的最后一个元素。

警告

BrowserView 类已弃用,并由新的 WebContentsView 类取代。

win.setTitleBarOverlay(options) Windows Linux

  • options 对象
    • color 字符串 (可选) - 启用时窗口控制叠加层的 CSS 颜色。
    • symbolColor 字符串 (可选) - 启用时窗口控制叠加层上符号的 CSS 颜色。
    • height 整数 (可选) - 标题栏和窗口控制叠加层的高度(像素)。

对于已启用窗口控制叠加层的窗口,此方法会更新标题栏叠加层的样式。

在 Linux 上,如果未明确设置,symbolColor 会自动计算以与 color 具有最小可访问对比度。