BaseWindow
创建和控制窗口。
进程:主进程
BaseWindow 提供了一种灵活的方式来在一个窗口中组合多个 Web 视图。对于只有一个全尺寸 Web 视图的窗口,BrowserWindow 类可能是一个更简单的选择。
在发出 app 模块的 ready 事件之前,此模块将无法使用。
// In the main process.
const { BaseWindow, WebContentsView } = require('electron')
const win = new BaseWindow({ width: 800, height: 600 })
const leftView = new WebContentsView()
leftView.webContents.loadURL('https://electron.js.cn')
win.contentView.addChildView(leftView)
const rightView = new WebContentsView()
rightView.webContents.loadURL('https://github.com/electron/electron')
win.contentView.addChildView(rightView)
leftView.setBounds({ x: 0, y: 0, width: 400, height: 600 })
rightView.setBounds({ x: 400, y: 0, width: 400, height: 600 })
父子窗口
通过使用 parent 选项,您可以创建子窗口。
const { BaseWindow } = require('electron')
const parent = new BaseWindow()
const child = new BaseWindow({ parent })
child 窗口将始终显示在 parent 窗口的上方。
模态窗口
模态窗口是一个禁用父窗口的子窗口。要创建模态窗口,您必须同时设置 parent 和 modal 选项。
const { BaseWindow } = require('electron')
const parent = new BaseWindow()
const child = new BaseWindow({ parent, modal: true })
平台注意事项
- 在 macOS 上,模态窗口将显示为附加到父窗口的表单。
- 在 macOS 上,当父窗口移动时,子窗口将保持相对于父窗口的位置;而在 Windows 和 Linux 上,子窗口不会移动。
- 在 Linux 上,模态窗口的类型将被更改为
dialog。 - 在 Linux 上,许多桌面环境不支持隐藏模态窗口。
资源管理
当您将一个 WebContentsView 添加到 BaseWindow 中,并且 BaseWindow 被关闭时,WebContentsView 的 webContents 不会自动销毁。
您有责任在不再需要 webContents 时将其关闭,例如当 BaseWindow 关闭时。
const { BaseWindow, WebContentsView } = require('electron')
const win = new BaseWindow({ width: 800, height: 600 })
const view = new WebContentsView()
win.contentView.addChildView(view)
win.on('closed', () => {
view.webContents.close()
})
与 BrowserWindow 不同,如果您不显式关闭 webContents,将会遇到内存泄漏。
类:BaseWindow
创建和控制窗口。
进程:主进程
BaseWindow 是一个 EventEmitter。
它使用 options 设置的本地属性创建一个新的 BaseWindow。
Electron 的内置类不能被用户代码继承。更多信息,请参阅常见问题解答。
new BaseWindow([options])
实例事件
使用 new BaseWindow 创建的对象会发出以下事件
某些事件仅在特定操作系统上可用,并已相应标记。
事件:'close'
返回
eventEvent
在窗口即将关闭时发出。它在 DOM 的 beforeunload 和 unload 事件之前发出。调用 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 = handler 和 window.addEventListener('beforeunload', handler) 的行为之间存在细微差别。建议始终显式设置 event.returnValue,而不仅仅是返回值,因为前者在 Electron 中工作更一致。
事件:'closed'
窗口关闭时发出。收到此事件后,您应该删除对窗口的引用,并避免再使用它。
事件:'query-session-end' Windows
返回
eventWindowSessionEndEvent
因关机、重启或用户注销而即将结束会话时发出。调用 event.preventDefault() 可以延迟系统关机,但通常最好尊重用户结束会话的决定。但是,如果您认为结束会话会使用户面临数据丢失的风险,可以选择使用它。
事件:'session-end' Windows
返回
eventWindowSessionEndEvent
因关机、重启或用户注销而即将结束会话时发出。一旦此事件触发,就无法阻止会话结束。
事件:'blur'
返回
eventEvent
窗口失去焦点时发出。
事件:'focus'
返回
eventEvent
窗口获得焦点时发出。
事件:'show'
窗口显示时发出。
事件:'hide'
窗口隐藏时发出。
事件:'maximize'
窗口最大化时发出。
事件:'unmaximize'
窗口退出最大化状态时发出。
事件:'minimize'
窗口最小化时发出。
事件:'restore'
窗口从最小化状态恢复时发出。
事件:'will-resize' macOS Windows
返回
eventEventnewBoundsRectangle - 窗口将被调整到的新边界。detailsObjectedge(string) - 正在拖动以调整窗口大小的边缘。可以是bottom、left、right、top-left、top-right、bottom-left或bottom-right。
在窗口大小调整之前发出。调用 event.preventDefault() 将阻止窗口大小调整。
请注意,这仅在窗口手动调整大小时发出。使用 setBounds/setSize 调整窗口大小时不会发出此事件。
edge 选项的可能值和行为是平台相关的。可能的值为
- 在 Windows 上,可能的值为
bottom、top、left、right、top-left、top-right、bottom-left、bottom-right。 - 在 macOS 上,可能的值为
bottom和right。- 值
bottom用于表示垂直调整大小。 - 值
right用于表示水平调整大小。
- 值
事件:'resize'
窗口大小调整后发出。
事件:'resized' macOS Windows
窗口完成大小调整后发出一次。
这通常在窗口手动调整大小时发出。在 macOS 上,使用 setBounds/setSize 调整窗口大小并将 animate 参数设置为 true 时,也会在大小调整完成后发出此事件一次。
事件:'will-move' macOS Windows
返回
eventEventnewBoundsRectangle - 窗口将被移动到的位置。
在窗口移动之前发出。在 Windows 上,调用 event.preventDefault() 将阻止窗口移动。
请注意,这仅在窗口手动移动时发出。使用 setPosition/setBounds/center 移动窗口时不会发出此事件。
事件:'move'
窗口移动到新位置时发出。
事件:'moved' macOS Windows
窗口移动到新位置时发出一次。
在 macOS 上,此事件是 move 的别名。
事件:'enter-full-screen'
窗口进入全屏状态时发出。
事件:'leave-full-screen'
窗口离开全屏状态时发出。
事件:'always-on-top-changed'
返回
eventEventisAlwaysOnTopboolean
窗口被设置为或取消设置为始终显示在其他窗口之上时发出。
事件:'app-command' Windows Linux
返回
eventEventcommandstring
调用 App Command 时发出。这些命令通常与媒体键盘键或浏览器命令有关,以及 Windows 上某些鼠标的“后退”按钮。
命令会被转换为小写,下划线替换为连字符,并去除 APPCOMMAND_ 前缀。例如 APPCOMMAND_BROWSER_BACKWARD 会被发出为 browser-backward。
const { BaseWindow } = require('electron')
const win = new BaseWindow()
win.on('app-command', (e, cmd) => {
// Navigate the window back when the user hits their mouse back button
if (cmd === 'browser-backward') {
// Find the appropriate WebContents to navigate.
}
})
以下应用程序命令在 Linux 上得到明确支持
browser-backwardbrowser-forward
事件:'swipe' macOS
返回
eventEventdirectionstring
3 指划动手势时发出。可能方向为 up、right、down、left。
此事件的底层方法旨在处理较旧的 macOS 式触控板滑动,其中屏幕上的内容不会随滑动而移动。大多数 macOS 触控板不再配置为允许此类滑动,因此为了使其正确发出,必须将“在页面之间滑动”(位于 系统偏好设置 > 触控板 > 更多手势)设置为“使用两指或三指滑动”。
事件:'rotate-gesture' macOS
返回
eventEventrotationFloat
触控板旋转手势时发出。在旋转手势结束前持续发出。每次发出的 rotation 值是自上次发出以来旋转的角度(度)。旋转手势结束后发出的最后一个事件始终值为 0。逆时针旋转值为正,顺时针值为负。
事件:'sheet-begin' macOS
窗口打开表单时发出。
事件:'sheet-end' macOS
窗口关闭表单时发出。
事件: 'new-window-for-tab' macOS
单击原生新标签按钮时发出。
事件:'system-context-menu' Windows Linux
返回
eventEventpointPoint - 触发上下文菜单的屏幕坐标。
在窗口上触发系统上下文菜单时发出,这通常只会在用户右键单击窗口的非客户端区域时发生。这是窗口标题栏或无边框窗口中声明为 -webkit-app-region: drag 的任何区域。
调用 event.preventDefault() 将阻止菜单显示。
要将 point 转换为 DIP,请使用 screen.screenToDipPoint(point)。
静态方法
BaseWindow 类具有以下静态方法
BaseWindow.getAllWindows()
返回 BaseWindow[] - 所有已打开的浏览器窗口数组。
BaseWindow.getFocusedWindow()
返回 BaseWindow | null - 此应用程序中获得焦点的窗口,否则返回 null。
BaseWindow.fromId(id)
idInteger
返回 BaseWindow | null - 具有给定 id 的窗口。
实例属性
使用 new BaseWindow 创建的对象具有以下属性
const { BaseWindow } = require('electron')
// In this example `win` is our instance
const win = new BaseWindow({ width: 800, height: 600 })
win.id 只读
一个 Integer 属性,表示窗口的唯一 ID。在整个 Electron 应用程序的所有 BaseWindow 实例中,每个 ID 都是唯一的。
win.contentView
窗口内容视图的 View 属性。
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 是一个 no-op(无操作),但 getter 返回 true。
win.maximizable macOS Windows
一个 boolean 属性,用于确定用户是否可以手动最大化窗口。
在 Linux 上,setter 是一个 no-op(无操作),但 getter 返回 true。
win.fullScreenable
一个 boolean 属性,用于确定最大化/缩放窗口按钮是切换全屏模式还是最大化窗口。
win.resizable
一个 boolean 属性,用于确定用户是否可以手动调整窗口大小。
win.closable macOS Windows
一个 boolean 属性,用于确定用户是否可以手动关闭窗口。
在 Linux 上,setter 是一个 no-op(无操作),但 getter 返回 true。
win.movable macOS Windows
一个 boolean 属性,用于确定用户是否可以移动窗口。
在 Linux 上,setter 是一个 no-op(无操作),但 getter 返回 true。
win.excludedFromShownWindowsMenu macOS
一个 boolean 属性,用于确定窗口是否从应用程序的“窗口”菜单中排除。默认值为 false。
const { Menu, BaseWindow } = require('electron')
const win = new BaseWindow({ 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 BaseWindow 创建的对象具有以下实例方法
某些方法仅在特定操作系统上可用,并已如此标记。
win.setContentView(view)
viewView
设置窗口的内容视图。
win.getContentView()
返回 View - 窗口的内容视图。
win.destroy()
强制关闭窗口,不会为网页发出 unload 和 beforeunload 事件,也不会为该窗口发出 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)
flagboolean
设置窗口是否应处于全屏模式。
在 macOS 上,全屏过渡是异步发生的。如果后续操作依赖于全屏状态,请使用 'enter-full-screen' 或 > 'leave-full-screen' 事件。
win.isFullScreen()
返回 boolean - 窗口是否处于全屏模式。
win.setSimpleFullScreen(flag) macOS
flagboolean
进入或退出简单全屏模式。
简单全屏模式模仿了 macOS 10.7 (Lion) 之前的原生全屏行为。
win.isSimpleFullScreen() macOS
返回 boolean - 窗口是否处于简单(Lion 之前)全屏模式。
win.isNormal()
返回 boolean - 窗口是否处于正常状态(未最大化、未最小化、未全屏)。
win.setAspectRatio(aspectRatio[, extraSize])
aspectRatioFloat - 用于维持内容视图某一部分的纵横比。extraSizeSize (可选) 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)
backgroundColorstring - 颜色格式为 Hex、RGB、RGBA、HSL、HSLA 或命名 CSS 颜色。对于 hex 类型,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 关键字类似,但区分大小写。
- 例如:
blueviolet或red
- 例如:
设置窗口的背景颜色。请参阅 设置 backgroundColor。
win.previewFile(path[, displayName]) macOS
pathstring - 要使用 QuickLook 预览的文件的绝对路径。这很重要,因为 Quick Look 使用路径中的文件名和文件扩展名来确定要打开的文件的内容类型。displayNamestring (可选) - 在 Quick Look 模态视图中显示的文件名。这纯粹是视觉上的,不会影响文件的内容类型。默认为path。
使用 Quick Look 预览给定路径的文件。
win.closeFilePreview() macOS
关闭当前打开的 Quick Look 面板。
win.setBounds(bounds[, animate])
boundsPartial<Rectangle>animateboolean (可选) macOS
将窗口调整大小并移动到指定的边界。未提供的任何属性都将默认为其当前值。
const { BaseWindow } = require('electron')
const win = new BaseWindow()
// 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 的高度。例如,当 Tray 高度为 38 像素时,调用 win.setBounds({ x: 25, y: 20, width: 800, height: 600 }),win.getBounds() 将返回 { x: 25, y: 38, width: 800, height: 600 }。
win.getBackgroundColor()
返回 string - 以 Hex (#RRGGBB) 格式获取窗口的背景颜色。
请参阅 设置 backgroundColor。
Alpha 值不与红色、绿色和蓝色值一起返回。
win.setContentBounds(bounds[, animate])
boundsRectangleanimateboolean (可选) macOS
将窗口的客户端区域(例如网页)调整大小并移动到指定的边界。
win.getContentBounds()
返回 Rectangle - 窗口客户端区域的 bounds,形式为 Object。
win.getNormalBounds()
返回 Rectangle - 包含窗口的正常状态下的边界。
无论当前窗口处于何种状态:最大化、最小化或全屏,此函数始终返回窗口在正常状态下的位置和大小。在正常状态下,getBounds 和 getNormalBounds 返回相同的 Rectangle。
win.setEnabled(enable)
enableboolean
禁用或启用窗口。
win.isEnabled()
返回 boolean - 窗口是否已启用。
win.setSize(width, height[, animate])
widthIntegerheightIntegeranimateboolean (可选) macOS
将窗口调整到 width 和 height。如果 width 或 height 低于任何设定的最小尺寸约束,窗口将调整到其最小尺寸。
win.getSize()
返回 Integer[] - 包含窗口的宽度和高度。
win.setContentSize(width, height[, animate])
widthIntegerheightIntegeranimateboolean (可选) macOS
将窗口的客户端区域(例如网页)调整到 width 和 height。
win.getContentSize()
返回 Integer[] - 包含窗口客户端区域的宽度和高度。
win.setMinimumSize(width, height)
widthIntegerheightInteger
将窗口的最小尺寸设置为 width 和 height。
win.getMinimumSize()
返回 Integer[] - 包含窗口的最小宽度和高度。
win.setMaximumSize(width, height)
widthIntegerheightInteger
将窗口的最大尺寸设置为 width 和 height。
win.getMaximumSize()
返回 Integer[] - 包含窗口的最大宽度和高度。
win.setResizable(resizable)
resizableboolean
设置窗口是否可由用户手动调整大小。
win.isResizable()
返回 boolean - 窗口是否可由用户手动调整大小。
win.setMovable(movable) macOS Windows
movableboolean
设置窗口是否可由用户移动。在 Linux 上无效。
win.isMovable() macOS Windows
返回 boolean - 窗口是否可由用户移动。
在 Linux 上始终返回 true。
win.setMinimizable(minimizable) macOS Windows
minimizableboolean
设置窗口是否可由用户手动最小化。在 Linux 上无效。
win.isMinimizable() macOS Windows
返回 boolean - 窗口是否可由用户手动最小化。
在 Linux 上始终返回 true。
win.setMaximizable(maximizable) macOS Windows
maximizableboolean
设置窗口是否可由用户手动最大化。在 Linux 上无效。
win.isMaximizable() macOS Windows
返回 boolean - 窗口是否可由用户手动最大化。
在 Linux 上始终返回 true。
win.setFullScreenable(fullscreenable)
fullscreenableboolean
设置最大化/缩放窗口按钮是切换全屏模式还是最大化窗口。
win.isFullScreenable()
返回 boolean - 最大化/缩放窗口按钮是切换全屏模式还是最大化窗口。
win.setClosable(closable) macOS Windows
closableboolean
设置窗口是否可由用户手动关闭。在 Linux 上无效。
win.isClosable() macOS Windows
返回 boolean - 窗口是否可由用户手动关闭。
在 Linux 上始终返回 true。
win.setHiddenInMissionControl(hidden) macOS
hiddenboolean
设置用户切换到 Mission Control 时窗口是否将被隐藏。
win.isHiddenInMissionControl() macOS
返回 boolean - 用户切换到 Mission Control 时窗口是否将被隐藏。
win.setAlwaysOnTop(flag[, level][, relativeLevel])
flagbooleanlevelstring (可选) macOS Windows - 可能的值包括normal、floating、torn-off-menu、modal-panel、main-menu、status、pop-up-menu、screen-saver,以及(已弃用)。当dockflag为 true 时,默认为floating。当 flag 为 false 时,level会重置为normal。请注意,从floating到status(含)的窗口会显示在 macOS 的 Dock 下方和 Windows 的任务栏下方。从pop-up-menu及更高层级,窗口会显示在 macOS 的 Dock 和 Windows 的任务栏上方。更多详情请参阅 macOS 文档。relativeLevelInteger (可选) macOS - 相对于给定level,窗口需要设置的层级数。默认为0。请注意,Apple 不推荐将层级设置得比screen-saver高出 1 层以上。
设置窗口是否应始终显示在其他窗口之上。设置此项后,窗口仍然是普通窗口,而不是无法聚焦的工具箱窗口。
win.isAlwaysOnTop()
返回 boolean - 窗口是否始终显示在其他窗口之上。
win.moveAbove(mediaSourceId)
mediaSourceIdstring - 窗口 ID,格式为 DesktopCapturerSource 的 ID。例如 "window:1869:0"。
将窗口在 z 轴顺序上移动到源窗口的上方。如果 mediaSourceId 不是窗口类型或窗口不存在,则此方法会抛出错误。
win.moveTop()
无论焦点如何,都将窗口移到最顶层(z 轴顺序)。
win.center()
将窗口移动到屏幕中心。
win.setPosition(x, y[, animate])
xIntegeryIntegeranimateboolean (可选) macOS
将窗口移动到 x 和 y 位置。
win.getPosition()
返回 Integer[] - 包含窗口当前位置。
win.setTitle(title)
titlestring
将原生窗口的标题更改为 title。
win.getTitle()
返回 string - 原生窗口的标题。
网页的标题可能与原生窗口的标题不同。
win.setSheetOffset(offsetY[, offsetX]) macOS
offsetYFloatoffsetXFloat (可选)
更改 macOS 上表单的附加点。默认情况下,表单附加在窗口框架正下方,但您可能希望将它们显示在 HTML 渲染的工具栏下方。例如
const { BaseWindow } = require('electron')
const win = new BaseWindow()
const toolbarRect = document.getElementById('toolbar').getBoundingClientRect()
win.setSheetOffset(toolbarRect.height)
win.flashFrame(flag)
历史
| 版本(s) | 更改 |
|---|---|
None |
|
None | API ADDED |
flagboolean
开始或停止闪烁窗口以吸引用户注意。
win.setSkipTaskbar(skip) macOS Windows
skipboolean
使窗口不显示在任务栏中。
win.setKiosk(flag)
flagboolean
进入或退出 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 用于标识 Web 内容(标签页),因此在同一顶级窗口内。
win.getNativeWindowHandle()
返回 Buffer - 窗口的平台特定句柄。
句柄的原生类型在 Windows 上是 HWND,在 macOS 上是 NSView*,在 Linux 上是 Window (unsigned long)。
win.hookWindowMessage(message, callback) Windows
messageIntegercallbackFunctionwParamBuffer - 提供给 WndProc 的wParamlParamBuffer - 提供给 WndProc 的lParam
钩取一个 Windows 消息。当在 WndProc 中收到消息时,会调用 callback。
win.isWindowMessageHooked(message) Windows
messageInteger
返回 boolean - 根据消息是否被钩取,返回 true 或 false。
win.unhookWindowMessage(message) Windows
messageInteger
取消钩取窗口消息。
win.unhookAllWindowMessages() Windows
取消钩取所有窗口消息。
win.setRepresentedFilename(filename) macOS
filenamestring
设置窗口所代表文件的路径名,并且该文件的图标将显示在窗口的标题栏中。
win.getRepresentedFilename() macOS
返回 string - 窗口所代表文件的路径名。
win.setDocumentEdited(edited) macOS
editedboolean
指定窗口的文档是否已被编辑,设置为 true 时,标题栏中的图标将变为灰色。
win.isDocumentEdited() macOS
返回 boolean - 窗口的文档是否已被编辑。
win.setMenu(menu) Linux Windows
menuMenu | null
将 menu 设置为窗口的菜单栏。
win.removeMenu() Linux Windows
移除窗口的菜单栏。
win.setProgressBar(progress[, options])
progressDouble
设置进度条的进度值。有效范围是 [0, 1.0]。
当 progress < 0 时移除进度条;当 progress > 1 时变为不确定模式。
在 Linux 平台,仅支持 Unity 桌面环境,您需要在 package.json 的 desktopName 字段中指定 *.desktop 文件名。默认情况下,它将假定为 {app.name}.desktop。
在 Windows 上,可以传递一个模式。接受的值为 none、normal、indeterminate、error 和 paused。如果您在未设置模式的情况下调用 setProgressBar(但值在有效范围内),则假定为 normal。
win.setOverlayIcon(overlay, description) Windows
overlayNativeImage | null - 显示在任务栏图标右下角的图标。如果此参数为null,则清除覆盖层descriptionstring - 将提供给辅助功能屏幕阅读器的描述
在当前任务栏图标上设置一个 16 x 16 像素的覆盖层,通常用于传达某种应用程序状态或被动通知用户。
win.invalidateShadow() macOS
使窗口阴影无效,以便根据当前窗口形状重新计算它。
透明的 BaseWindow 有时会在 macOS 上留下视觉伪影。当执行动画等操作时,可以使用此方法清除这些伪影。
win.setHasShadow(hasShadow)
hasShadowboolean
设置窗口是否应具有阴影。
win.hasShadow()
返回 boolean - 窗口是否具有阴影。
win.setOpacity(opacity) Windows macOS
opacitynumber - 介于 0.0(完全透明)和 1.0(完全不透明)之间
设置窗口的不透明度。在 Linux 上,不起作用。超出范围的数值将被限制在 [0, 1] 范围内。
win.getOpacity()
返回 number - 介于 0.0(完全透明)和 1.0(完全不透明)之间。在 Linux 上,始终返回 1。
win.setShape(rects) Windows Linux Experimental
rectsRectangle[] - 设置窗口的形状。传递空列表会将窗口恢复为矩形。
设置窗口形状决定了系统中允许绘制和用户交互的窗口区域。在给定区域之外,不会绘制任何像素,也不会注册任何鼠标事件。区域外的鼠标事件不会被该窗口接收,而是会传递给窗口下方的任何内容。
win.setThumbarButtons(buttons) Windows
buttonsThumbarButton[]
返回 boolean - 按钮是否已成功添加
将包含指定按钮的缩略图工具栏添加到任务栏按钮布局中的窗口缩略图。返回一个 boolean 对象,指示缩略图是否已成功添加。
由于空间有限,缩略图工具栏中的按钮数量应不超过 7 个。一旦设置了缩略图工具栏,由于平台限制,就无法将其移除。但是,您可以通过传递空数组来调用该 API 来清除按钮。
buttons 是一个 Button 对象的数组
ButtonObjecticonNativeImage - 显示在缩略图工具栏中的图标。clickFunctiontooltipstring (optional) - 按钮工具提示的文本。flagsstring[] (optional) - 控制按钮的特定状态和行为。默认值为['enabled']。
flags 是一个可以包含以下 string 的数组
enabled- 按钮处于活动状态,可供用户使用。disabled- 按钮已禁用。它存在,但具有视觉状态,表明它不会响应用户操作。dismissonclick- 单击按钮时,缩略图窗口将立即关闭。nobackground- 不绘制按钮边框,仅使用图像。hidden- 按钮不会显示给用户。noninteractive- 按钮已启用但不可交互;不绘制按下按钮状态。此值用于按钮用作通知的情况。
win.setThumbnailClip(region) Windows
regionRectangle - 窗口区域
设置在任务栏中悬停窗口时显示的缩略图的窗口区域。您可以通过指定一个空区域来将缩略图重置为整个窗口:{ x: 0, y: 0, width: 0, height: 0 }。
win.setThumbnailToolTip(toolTip) Windows
toolTipstring
设置当用户将鼠标悬停在任务栏窗口缩略图上时显示的工具提示。
win.setAppDetails(options) Windows
设置窗口任务栏按钮的属性。
relaunchCommand 和 relaunchDisplayName 必须一起设置。如果其中一个属性未设置,则两者都将不被使用。
win.setAccentColor(accentColor) Windows
accentColorboolean | 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 - 以十六进制 RGB 格式显示的系统强调色和活动窗口边框的突出显示。
如果为窗口设置的颜色与系统强调色不同,则会返回窗口强调色。否则,将返回一个布尔值,其中 true 表示窗口使用全局系统强调色,false 表示此窗口的强调色突出显示已禁用。
win.setIcon(icon) Windows Linux
iconNativeImage | string
更改窗口图标。
win.setWindowButtonVisibility(visible) macOS
visibleboolean
设置窗口交通灯按钮是否可见。
win.setAutoHideMenuBar(hide) Windows Linux
hideboolean
设置窗口菜单栏是否自动隐藏。设置后,菜单栏仅在用户按下单独的 Alt 键时显示。
如果菜单栏已可见,调用 setAutoHideMenuBar(true) 不会立即将其隐藏。
win.isMenuBarAutoHide() Windows Linux
返回 boolean - 菜单栏是否自动隐藏。
win.setMenuBarVisibility(visible) Windows Linux
visibleboolean
设置菜单栏是否可见。如果菜单栏自动隐藏,用户仍然可以通过按下单独的 Alt 键来调出菜单栏。
win.isMenuBarVisible() Windows Linux
返回 boolean - 菜单栏是否可见。
win.isSnapped() Windows
返回 boolean - 窗口是否已通过 Snap 排列。
窗口通过鼠标悬停在窗口最大化按钮上时显示的按钮,或通过将其拖动到屏幕边缘来捕捉。
win.setVisibleOnAllWorkspaces(visible[, options]) macOS Linux
visibleboolean
设置窗口是否应在所有工作区上可见。
此 API 在 Windows 上不起作用。
win.isVisibleOnAllWorkspaces() macOS Linux
返回 boolean - 窗口是否在所有工作区上可见。
此 API 在 Windows 上始终返回 false。
win.setIgnoreMouseEvents(ignore[, options])
ignoreboolean
使窗口忽略所有鼠标事件。
此窗口中的所有鼠标事件都将传递给该窗口下方的窗口,但如果此窗口具有焦点,它仍将接收键盘事件。
win.setContentProtection(enable) macOS Windows
enableboolean
防止其他应用程序捕获窗口内容。
在 macOS 上,它将 NSWindow 的 sharingType 设置为 NSWindowSharingNone。在 Windows 上,它调用 SetWindowDisplayAffinity 并使用 WDA_EXCLUDEFROMCAPTURE。对于 Windows 10 版本 2004 及更高版本,窗口将完全从捕获中移除,较旧的 Windows 版本表现为应用了 WDA_MONITOR,捕获一个黑色窗口。
win.isContentProtected() macOS Windows
返回 boolean - 内容保护当前是否已启用。
win.setFocusable(focusable) macOS Windows
focusableboolean
更改窗口是否可以获得焦点。
在 macOS 上,它不会移除窗口的焦点。
win.isFocusable() macOS Windows
返回 boolean - 窗口是否可以获得焦点。
win.setParentWindow(parent)
parentBaseWindow | null
将 parent 设置为当前窗口的父窗口,传递 null 将使当前窗口成为顶层窗口。
win.getParentWindow()
返回 BaseWindow | null - 父窗口或 null(如果没有父窗口)。
win.getChildWindows()
返回 BaseWindow[] - 所有子窗口。
win.setAutoHideCursor(autoHide) macOS
autoHideboolean
控制输入时是否隐藏光标。
win.selectPreviousTab() macOS
当启用了原生标签页并且窗口中有其他标签页时,选择上一个标签页。
win.selectNextTab() macOS
当启用了原生标签页并且窗口中有其他标签页时,选择下一个标签页。
win.showAllTabs() macOS
当启用了原生标签页时,显示或隐藏标签页概览。
win.mergeAllWindows() macOS
当启用了原生标签页且有多个打开的窗口时,将所有窗口合并为一个具有多个标签页的窗口。
win.moveTabToNewWindow() macOS
当启用了原生标签页且当前窗口中有多个标签页时,将当前标签页移动到新窗口。
win.toggleTabBar() macOS
当启用了原生标签页且当前窗口只有一个标签页时,切换标签栏的可见性。
win.addTabbedWindow(baseWindow) macOS
baseWindowBaseWindow
将一个窗口添加为当前窗口的标签页,位于该窗口实例的标签页之后。
win.setVibrancy(type) macOS
typestring | null - 可以是titlebar、selection、menu、popover、sidebar、header、sheet、window、hud、fullscreen-ui、tooltip、content、under-window或under-page。有关更多详细信息,请参阅 macOS 文档。
为窗口添加振动效果。传递 null 或空字符串将移除窗口上的振动效果。
win.setBackgroundMaterial(material) Windows
materialstringauto- 让桌面窗口管理器 (DWM) 自动决定此窗口的系统绘制的背景材质。这是默认值。none- 不绘制任何系统背景。mica- 绘制对应于长期窗口的背景材质效果。acrylic- 绘制对应于临时窗口的背景材质效果。tabbed- 绘制对应于具有标签式标题栏的窗口的背景材质效果。
此方法设置浏览器窗口的系统绘制背景材质,包括非客户端区域的后面。
有关更多详细信息,请参阅 Windows 文档。
此方法仅支持 Windows 11 22H2 及更高版本。
win.setWindowButtonPosition(position) macOS
positionPoint | null
为无边框窗口的交通灯按钮设置自定义位置。传递 null 将重置为默认位置。
win.getWindowButtonPosition() macOS
返回 Point | null - 无边框窗口中交通灯按钮的自定义位置,如果没有自定义位置,则返回 null。
win.setTouchBar(touchBar) macOS
touchBarTouchBar | null
为当前窗口设置 touchBar 布局。指定 null 或 undefined 将清除 touch bar。此方法仅在机器有 touch bar 时生效。
TouchBar API 目前仍处于实验阶段,在未来的 Electron 版本中可能会发生更改或被移除。
win.setTitleBarOverlay(options) Windows Linux
在已启用窗口控件覆盖层的窗口上,此方法会更新标题栏覆盖层的样式。
在 Linux 上,如果未明确设置,symbolColor 将自动计算以与 color 达到最小的可访问对比度。