跳转到主要内容

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 事件之前发出。

请注意,使用此事件意味着渲染器将被视为“可见”并进行绘制,即使 showfalse。如果使用 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()

child 窗口将始终显示在 top 窗口之上。

模态窗口是禁用父窗口的子窗口。要创建模态窗口,您必须同时设置 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
  • 如果 BrowserWindow 是使用 show: false 创建的,则初始可见性状态将是 visible,尽管窗口实际上是隐藏的。
  • 如果禁用了 backgroundThrottling,即使窗口被最小化、遮挡或隐藏,可见性状态仍将保持 visible

建议在可见性状态为 hidden 时暂停昂贵的操作,以最大程度地减少功耗。

平台注意事项

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

类:BrowserWindow 继承自 BaseWindow

创建和控制浏览器窗口。

进程:主进程

BrowserWindow 是一个 EventEmitter

它使用 options 中设置的原生属性创建一个新的 BrowserWindow

警告

Electron 的内置类不能被用户代码继承。更多信息,请参阅常见问题解答

new BrowserWindow([options])

  • options BrowserWindowConstructorOptions (可选)
    • webPreferences WebPreferences (可选) - Web 页面的功能设置。
      • devTools boolean (可选) - 是否启用开发者工具。如果设置为 false,则无法使用 BrowserWindow.webContents.openDevTools() 打开开发者工具。默认为 true
      • nodeIntegration boolean (可选) - 是否启用 Node 集成。默认为 false
      • nodeIntegrationInWorker boolean (可选) - 是否在 Web Worker 中启用 Node 集成。默认为 false。有关更多信息,请参阅 多线程
      • nodeIntegrationInSubFrames boolean (可选) - 一个实验性选项,用于在子框架(如 iframe 和子窗口)中启用 Node.js 支持。您的所有预加载脚本都将为每个 iframe 加载,您可以使用 process.isMainFrame 来确定您是否在主框架中。
      • preload string (可选) - 指定一个脚本,该脚本将在其他脚本运行页面之前加载。无论节点集成是打开还是关闭,此脚本始终可以访问 node API。该值应为脚本的绝对文件路径。当节点集成关闭时,预加载脚本可以将 Node 全局符号重新引入全局作用域。请参阅 此处 的示例。
      • sandbox boolean (可选) - 如果设置为 true,则会沙盒化与窗口关联的渲染器,使其与 Chromium 操作系统级别的沙盒兼容并禁用 Node.js 引擎。这与 nodeIntegration 选项不同,并且预加载脚本可用的 API 更有限。自 Electron 20 起,默认值为 true。当 nodeIntegration 设置为 true 时,沙盒将自动禁用。在此 阅读有关此选项的更多信息。
      • 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 (可选) - 设置 font-family 的默认字体。
        • 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。有关更多详细信息,请参阅 离屏渲染教程
        • sharedTexturePixelFormat string (可选) 实验性 - 请求的共享纹理的输出格式。默认为 argb。该名称源自 Chromium media::VideoPixelFormat 枚举后缀,并且仅支持其中一部分。实际输出像素格式和纹理的颜色空间应参考 paint 事件中的 OffscreenSharedTexture 对象。
          • argb - 请求的输出纹理格式为 8 位 unorm RGBA,具有 SRGB SDR 颜色空间。
          • rgbaf16 - 请求的输出纹理格式为 16 位浮点 RGBA,具有 scRGB HDR 颜色空间。
      • contextIsolation boolean (可选) - 是否在单独的 JavaScript 上下文中运行 Electron API 和指定的 preload 脚本。默认为 true。预加载脚本运行的上下文将只能访问其自己的专用 documentwindow 全局变量,以及其自己的 JavaScript 内置函数集(ArrayObjectJSON 等),这些都对加载的内容不可见。Electron API 将仅在预加载脚本中可用,而在加载的页面中不可用。当加载可能不受信任的远程内容时,应使用此选项,以确保加载的内容无法篡改预加载脚本和正在使用的任何 Electron API。此选项使用 Chrome 内容脚本 使用的相同技术。您可以通过在开发者工具的 Console 标签页顶部选择“Electron Isolated Context”条目来访问此上下文。
      • webviewTag boolean (可选) - 是否启用 <webview> 标签。默认为 false注意:<webview> 配置的预加载脚本在执行时将启用节点集成,因此您应确保远程/不受信任的内容无法创建带有潜在恶意预加载脚本的 <webview> 标签。您可以使用 <webContents> 上的 will-attach-webview 事件来剥离预加载脚本,并验证或修改 <webview> 的初始设置。
      • additionalArguments string[] (可选) - 将附加到此应用程序的渲染器进程的 process.argv 的字符串列表。用于将少量数据传递给渲染器进程 preload 脚本。
      • 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
    • 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 合成时,explicitSetfalse

事件:'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'

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

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

事件:'maximize'

窗口最大化时发出。

事件:'unmaximize'

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

事件:'minimize'

窗口最小化时发出。

事件:'restore'

当窗口从最小化状态恢复到其先前状态时发出。

事件:'will-resize' macOS Windows

返回

  • event Event
  • newBounds Rectangle - 窗口将被调整到的新边界。
  • details Object
    • edge (string) - 正在拖动的窗口边缘,用于调整大小。可以是 bottom, left, right, top-left, top-right, bottom-leftbottom-right

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

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

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

  • 在 Windows 上,可能的值为 bottom, top, left, right, top-left, top-right, bottom-left, bottom-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

在 3 指滑动时发出。可能的方向是 up, right, down, left

此事件的底层方法旨在处理旧的 macOS 风格的触控板滑动,在该滑动中,屏幕内容不会随着滑动而移动。大多数 macOS 触控板不再配置为允许这种滑动,因此为了使其正确发出,必须在 系统偏好设置 > 触控板 > 更多手势 中将“在页面之间滑动”首选项设置为“使用两指或三指滑动”。

事件:'rotate-gesture' macOS

返回

  • event Event
  • rotation Float

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

事件:'sheet-begin' macOS

当窗口打开表单(sheet)时发出。

事件:'sheet-end' macOS

当窗口关闭表单(sheet)时发出。

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

当点击原生的新建标签页按钮时发出。

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

返回

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

当窗口上的系统上下文菜单被触发时发出,这通常只在用户右键单击窗口的非客户端区域时触发。这是窗口标题栏或在无边框窗口中在 CSS 中声明为 -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。在整个 Electron 应用程序的所有 BrowserWindow 实例中,每个 ID 都是唯一的。

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 属性,用于确定窗口是否处于 kiosk 模式。

win.documentEdited macOS

一个 boolean 属性,用于指定窗口的文档是否已编辑。设置为 true 时,标题栏中的图标将变为灰色。

设置为 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 属性,指示窗口是否通过 Snap 排列。

实例方法

使用 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

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

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

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 值示例

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

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

win.closeFilePreview() macOS

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

win.setBounds(bounds[, animate])

  • bounds Partial<Rectangle>
  • animate boolean (可选) 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 坐标值不能小于 Tray 的高度。Tray 的高度会随着时间的推移而变化,并取决于操作系统,但通常在 20-40 像素之间。传递低于 Tray 高度的值将导致窗口与 Tray 齐平。

win.getBounds()

返回 Rectangle - 窗口的 bounds,以 Object 的形式。

注意

在 macOS 上,返回的 y 坐标值将至少是 Tray 的高度。例如,调用 win.setBounds({ x: 25, y: 20, width: 800, height: 600 })(Tray 高度为 38)后,win.getBounds() 将返回 { x: 25, y: 38, width: 800, height: 600 }

win.getBackgroundColor()

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

请参阅 设置 backgroundColor

注意

alpha 值不会与红色、绿色和蓝色值一起返回。

win.setContentBounds(bounds[, animate])

  • bounds Rectangle
  • animate boolean (可选) macOS

将窗口的客户区(例如网页)调整到指定的大小和位置。

win.getContentBounds()

返回 Rectangle - 窗口客户区的 bounds,以 Object 的形式。

win.getNormalBounds()

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

注意

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

win.setEnabled(enable)

  • enable boolean

禁用或启用窗口。

win.isEnabled()

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

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

  • width Integer
  • height Integer
  • animate boolean (可选) macOS

将窗口调整为 widthheight。如果 widthheight 低于任何设定的最小尺寸约束,窗口将调整到其最小尺寸。

win.getSize()

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

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

  • width Integer
  • height Integer
  • animate boolean (可选) macOS

将窗口的客户区(例如网页)调整为 widthheight

win.getContentSize()

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

win.setMinimumSize(width, height)

  • width Integer
  • height Integer

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

win.getMinimumSize()

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

win.setMaximumSize(width, height)

  • width Integer
  • height Integer

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

win.getMaximumSize()

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

win.setResizable(resizable)

  • resizable boolean

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

win.isResizable()

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

win.setMovable(movable) macOS Windows

  • movable boolean

设置用户是否可以移动窗口。在 Linux 上无效。

win.isMovable() macOS Windows

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

在 Linux 上始终返回 true

win.setMinimizable(minimizable) macOS Windows

  • minimizable boolean

设置用户是否可以手动最小化窗口。在 Linux 上无效。

win.isMinimizable() macOS Windows

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

在 Linux 上始终返回 true

win.setMaximizable(maximizable) macOS Windows

  • maximizable boolean

设置用户是否可以手动最大化窗口。在 Linux 上无效。

win.isMaximizable() macOS Windows

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

在 Linux 上始终返回 true

win.setFullScreenable(fullscreenable)

  • fullscreenable boolean

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

win.isFullScreenable()

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

win.setClosable(closable) macOS Windows

  • closable boolean

设置用户是否可以手动关闭窗口。在 Linux 上无效。

win.isClosable() macOS Windows

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

在 Linux 上始终返回 true

win.setHiddenInMissionControl(hidden) macOS

  • hidden boolean

设置当用户切换到 Mission Control 时窗口是否将被隐藏。

win.isHiddenInMissionControl() macOS

返回 boolean - 当用户切换到 Mission Control 时窗口是否将被隐藏。

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

  • flag boolean
  • level string (可选) macOS Windows - 值包括 normal, floating, torn-off-menu, modal-panel, main-menu, status, pop-up-menu, screen-saver, 和 dock(已弃用)。当 flagtrue 时,默认为 floating。当 flagfalse 时,level 将重置为 normal。请注意,从 floatingstatus(含)的窗口位于 macOS 的 Dock 下方和 Windows 的任务栏下方。从 pop-up-menu 及以上级别,它们显示在 macOS 的 Dock 和 Windows 的任务栏上方。有关更多详细信息,请参阅 macOS 文档
  • relativeLevel Integer (可选) macOS - 相对于给定 level 将此窗口设置到高多少个层级。默认为 0。请注意,Apple 不鼓励将高于 screen-saver 的层级设置为 1 以上。

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

win.isAlwaysOnTop()

返回 boolean - 窗口是否始终显示在其他窗口之上。

win.moveAbove(mediaSourceId)

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

将窗口置于源窗口的上方(z 轴顺序)。如果 mediaSourceId 不是窗口类型,或者窗口不存在,则此方法将抛出错误。

win.moveTop()

无论焦点如何,将窗口置于最顶层(z 轴顺序)。

win.center()

将窗口移动到屏幕中央。

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

  • x Integer
  • y Integer
  • animate boolean (可选) macOS

将窗口移动到 xy 位置。

win.getPosition()

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

win.setTitle(title)

  • title string

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

win.getTitle()

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

注意

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

win.setSheetOffset(offsetY[, offsetX]) macOS

  • offsetY Float
  • offsetX Float (可选)

更改 macOS 上表单(sheet)的附加点。默认情况下,表单附加在窗口框架的正下方,但您可能希望将它们显示在 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 boolean

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

win.setKiosk(flag)

  • flag boolean

进入或退出 kiosk 模式。

win.isKiosk()

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

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 用于识别网页内容(标签页),因此在同一个顶级窗口内。

win.getNativeWindowHandle()

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

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

win.hookWindowMessage(message, callback) Windows

  • message Integer
  • callback Function
    • wParam Buffer - 提供给 WndProc 的 wParam
    • lParam Buffer - 提供给 WndProc 的 lParam

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

win.isWindowMessageHooked(message) Windows

  • message Integer

返回 boolean - truefalse,取决于消息是否被挂钩。

win.unhookWindowMessage(message) Windows

  • message Integer

取消挂钩窗口消息。

win.unhookAllWindowMessages() Windows

取消挂钩所有窗口消息。

win.setRepresentedFilename(filename) macOS

  • filename string

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

win.getRepresentedFilename() macOS

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

win.setDocumentEdited(edited) macOS

  • edited boolean

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

win.isDocumentEdited() macOS

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

win.focusOnWebView()

win.blurWebView()

win.capturePage([rect, opts])

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

返回 Promise<NativeImage> - 解析为 NativeImage

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

win.loadURL(url[, options])

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

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

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

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

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

const { BrowserWindow } = require('electron')

const win = new BrowserWindow()

const url = require('node: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 string
  • options Object (可选)
    • query Record<string, string> (可选) - 传递给 url.format()
    • search string (可选) - 传递给 url.format()
    • hash string (可选) - 传递给 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 Double
  • options Object (可选)
    • mode string Windows - 进度条的模式。可以是 nonenormalindeterminateerrorpaused

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

当 progress < 0 时移除进度条;当 progress > 1 时切换到不确定模式。

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

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

win.setOverlayIcon(overlay, description) Windows

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

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

win.invalidateShadow() macOS

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

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

win.setHasShadow(hasShadow)

  • hasShadow boolean

设置窗口是否应具有阴影。

win.hasShadow()

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

win.setOpacity(opacity) Windows macOS

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

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

win.getOpacity()

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

win.setShape(rects) Windows Linux Experimental

  • rects Rectangle[] - 为窗口设置形状。传递一个空列表会将窗口恢复为矩形。

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

win.setThumbarButtons(buttons) Windows

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

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

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

buttons 是一个 Button 对象的数组。

  • Button Object
    • icon NativeImage - 显示在缩略图工具栏中的图标。
    • click Function
    • tooltip string (optional) - 按钮工具提示的文本。
    • flags string[] (optional) - 控制按钮的特定状态和行为。默认值为 ['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 string

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

win.setAppDetails(options) Windows

  • options Object
    • appId string (可选) - 窗口的 App User Model ID。必须设置,否则其他选项将无效。
    • appIconPath string (可选) - 窗口的 Relaunch Icon
    • appIconIndex Integer (可选) - appIconPath 中图标的索引。当 appIconPath 未设置时将被忽略。默认为 0
    • relaunchCommand string (可选) - 窗口的 Relaunch Command
    • relaunchDisplayName string (可选) - 窗口的 Relaunch Display Name

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

注意

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

win.setAccentColor(accentColor) Windows

  • accentColor boolean | string - 窗口的强调色。默认情况下,遵循系统设置中的用户偏好。

设置系统强调色和活动窗口边框的突出显示。

accentColor 参数接受以下值:

  • 颜色字符串 - 使用标准的 CSS 颜色格式(Hex、RGB、RGBA、HSL、HSLA 或命名颜色)设置自定义强调色。RGBA/HSLA 格式中的 Alpha 值将被忽略,颜色被视为完全不透明。
  • true - 使用系统设置中的系统默认强调色。
  • false - 显式禁用窗口的强调色突出显示。

示例

const win = new BrowserWindow({ frame: false })

// Set red accent color.
win.setAccentColor('#ff0000')

// RGB format (alpha ignored if present).
win.setAccentColor('rgba(255,0,0,0.5)')

// Use system accent color.
win.setAccentColor(true)

// Disable accent color.
win.setAccentColor(false)

win.getAccentColor() Windows

返回 string | boolean - 以 Hex RGB 格式显示的系统强调色和活动窗口边框的突出显示。

如果为窗口设置的颜色与系统强调色不同,则会返回窗口强调色。否则,将返回一个布尔值,其中 true 表示窗口使用全局系统强调色,false 表示该窗口的强调色突出显示已禁用。

win.showDefinitionForSelection() macOS

webContents.showDefinitionForSelection() 相同。

win.setIcon(icon) Windows Linux

更改窗口图标。

win.setWindowButtonVisibility(visible) macOS

  • visible boolean

设置窗口交通灯按钮是否可见。

win.setAutoHideMenuBar(hide) Windows Linux

  • hide boolean

设置窗口菜单栏是否应自动隐藏。设置后,菜单栏仅在用户按下单个 Alt 键时显示。

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

win.isMenuBarAutoHide() Windows Linux

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

win.setMenuBarVisibility(visible) Windows Linux

  • visible boolean

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

win.isMenuBarVisible() Windows Linux

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

win.isSnapped() Windows

返回 boolean - 窗口是否通过 Snap 进行了排列。

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

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

  • visible boolean
  • options Object (可选)
    • visibleOnFullScreen boolean (可选) macOS - 设置窗口是否应显示在全屏窗口之上。
    • skipTransformProcessType boolean (可选) macOS - 调用 setVisibleOnAllWorkspaces 时,默认情况下会将进程类型从 UIElementApplication 转换为 ForegroundApplication 以确保正确的行为。但是,每次调用时都会短暂隐藏窗口和 Dock。如果您的窗口已经是 UIElementApplication 类型,则可以通过传递 true 来绕过此转换。

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

注意

此 API 在 Windows 上不起作用。

win.isVisibleOnAllWorkspaces() macOS Linux

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

注意

此 API 在 Windows 上始终返回 false。

win.setIgnoreMouseEvents(ignore[, options])

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

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

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

win.setContentProtection(enable) macOS Windows

  • enable boolean

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

在 Windows 上,它调用 SetWindowDisplayAffinityWDA_EXCLUDEFROMCAPTURE。对于 Windows 10 版本 2004 及更高版本,窗口将完全从捕获中移除,较旧的 Windows 版本表现为应用了 WDA_MONITOR,捕获一个黑色的窗口。

在 macOS 上,它将 NSWindowsharingType 设置为 NSWindowSharingNone。不幸的是,由于 macOS 中的有意更改,使用 ScreenCaptureKit 的较新 Mac 应用程序将捕获您的窗口,即使 win.setContentProtection(true)。请参阅 此处

win.isContentProtected() macOS Windows

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

win.setFocusable(focusable) macOS Windows

  • focusable boolean

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

在 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 boolean

控制在输入时是否隐藏光标。

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 string | null - 可以是 titlebarselectionmenupopoversidebarheadersheetwindowhudfullscreen-uitooltipcontentunder-windowunder-page。有关更多详细信息,请参阅 macOS 文档
  • options Object (可选)
    • animationDuration number (可选) - 如果大于零,则渐变效果的变化将在给定的持续时间(以毫秒为单位)内进行动画。

为浏览器窗口添加渐变效果。传递 null 或空字符串将删除窗口上的渐变效果。animationDuration 参数仅用于淡入或淡出渐变效果。不支持在不同类型的渐变之间进行动画。

win.setBackgroundMaterial(material) Windows

  • material string
    • 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

设置当前窗口的 touchBar 布局。指定 nullundefined 会清除 touch bar。此方法仅在机器具有 touch bar 时才有效。

注意

TouchBar API 目前仍处于实验阶段,在未来的 Electron 版本中可能会发生更改或被移除。

win.setBrowserView(browserView) Experimental Deprecated

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

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

win.getBrowserView() Experimental Deprecated

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

警告

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

win.addBrowserView(browserView) Experimental Deprecated

用于处理多个 browser views 的 setBrowserView 的替换 API。

警告

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

win.removeBrowserView(browserView) Experimental Deprecated

警告

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

win.setTopBrowserView(browserView) Experimental Deprecated

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

警告

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

win.getBrowserViews() Experimental Deprecated

返回 BrowserView[] - 一个按 z-index 排序的、使用 addBrowserViewsetBrowserView 附加的所有 BrowserViews 的数组。最顶层的 BrowserView 是数组的最后一个元素。

警告

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

win.setTitleBarOverlay(options) Windows Linux

  • options Object
    • color String (可选) - 启用窗口控件叠加层时的 CSS 颜色。
    • symbolColor String (可选) - 启用窗口控件叠加层时的符号的 CSS 颜色。
    • height Integer (可选) - 标题栏和窗口控件叠加层的高度(以像素为单位)。

在已启用窗口控件叠加层的窗口上,此方法会更新标题栏叠加层的样式。

在 Linux 上,如果未显式设置 symbolColor,它将自动计算以获得与 color 的最小可访问对比度。