Create and control windows.
Process: Main
Note
BaseWindow
provides a flexible way to compose multiple web views in a
single window. For windows with only a single, full-size web view, the
BrowserWindow
class may be a simpler option.
This module cannot be used until the ready
event of the app
module is emitted.
const { BaseWindow, WebContentsView } = require('electron')
const win = new BaseWindow({ width: 800, height: 600 })
const leftView = new WebContentsView()
leftView.webContents.loadURL('https://electronjs.org')
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 })
Родительские и дочерние окна
By using parent
option, you can create child windows:
const { BaseWindow } = require('electron')
const parent = new BaseWindow()
const child = new BaseWindow({ parent })
The child
window will always show on top of the parent
window.
Модальные окна
A modal window is a child window that disables parent window. To create a modal
window, you have to set both the parent
and modal
options:
const { BaseWindow } = require('electron')
const parent = new BaseWindow()
const child = new BaseWindow({ parent, modal: true })
Платформа заметок
- На macOS модальные окна будут отображены в виде страниц, прикрепленных к родительскому окну.
- On macOS the child windows will keep the relative position to parent window
when parent window moves, while on Windows and Linux child windows will not
move.
- On Linux the type of modal windows will be changed to
dialog
.
- На Linux многие среды рабочего стола не поддерживают скрытие модального окна.
Resource management
When you add a WebContentsView
to a BaseWindow
and the BaseWindow
is closed, the webContents
of the WebContentsView
are not destroyed
automatically.
It is your responsibility to close the webContents
when you no longer need them, e.g. when
the BaseWindow
is closed:
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()
})
Unlike with a BrowserWindow
, if you don't explicitly close the
webContents
, you'll encounter memory leaks.
Class: BaseWindow
Create and control windows.
Process: Main
BaseWindow
is an EventEmitter.
It creates a new BaseWindow
with native properties as set by the options
.
new BaseWindow([options])
options
BaseWindowConstructorOptions (optional)
width
Integer (optional) - Window's width in pixels. Default is 800
.
height
Integer (optional) - Window's height in pixels. Default is 600
.
x
Integer (optional) - (required if y is used) Window's left offset from screen.
Значение по умолчанию центрирует окно.
y
Integer (optional) - (required if x is used) Window's top offset from screen.
Значение по умолчанию центрирует окно.
useContentSize
boolean (optional) - The width
and height
would be used as web
page's size, which means the actual window's size will include window
frame's size and be slightly larger. Default is false
.
center
boolean (optional) - Show window in the center of the screen. Default is false
.
minWidth
Integer (optional) - Window's minimum width. Default is 0
.
minHeight
Integer (optional) - Window's minimum height. Default is 0
.
maxWidth
Integer (optional) - Window's maximum width. По умолчанию нет ограничения.
maxHeight
Integer (optional) - Window's maximum height. По умолчанию нет ограничения.
resizable
boolean (optional) - Whether window is resizable. Default is true
.
movable
boolean (optional) macOS Windows - Whether window is
movable. Не реализовано в Linux. Default is true
.
minimizable
boolean (optional) macOS Windows - Whether window is
minimizable. Не реализовано в Linux. Default is true
.
maximizable
boolean (optional) macOS Windows - Whether window is
maximizable. Не реализовано в Linux. Default is true
.
closable
boolean (optional) macOS Windows - Whether window is
closable. Не реализовано в Linux. Default is true
.
focusable
boolean (optional) - Whether the window can be focused. Default is
true
. On Windows setting focusable: false
also implies setting
skipTaskbar: true
. On Linux setting focusable: false
makes the window
stop interacting with wm, so the window will always stay on top in all
workspaces.
alwaysOnTop
boolean (optional) - Whether the window should always stay on top of
other windows. Default is false
.
fullscreen
boolean (optional) - Whether the window should show in fullscreen. When
explicitly set to false
the fullscreen button will be hidden or disabled
on macOS. Default is false
.
fullscreenable
boolean (optional) - Whether the window can be put into fullscreen
mode. On macOS, also whether the maximize/zoom button should toggle full
screen mode or maximize window. Default is true
.
simpleFullscreen
boolean (optional) macOS - Use pre-Lion fullscreen on
macOS. Default is false
.
skipTaskbar
boolean (optional) macOS Windows - Whether to show the window in taskbar.
Default is false
.
hiddenInMissionControl
boolean (optional) macOS - Whether window should be hidden when the user toggles into mission control.
kiosk
boolean (optional) - Whether the window is in kiosk mode. Default is false
.
title
string (optional) - Default window title. Default is "Electron"
. If the HTML tag <title>
is defined in the HTML file loaded by loadURL()
, this property will be ignored.
icon
(NativeImage | string) (optional) - The window icon. On Windows it is
recommended to use ICO
icons to get best visual effects, you can also
leave it undefined so the executable's icon will be used.
show
boolean (optional) - Whether window should be shown when created. Default is
true
.
frame
boolean (optional) - Specify false
to create a
frameless window. Default is true
.
parent
BaseWindow (optional) - Specify parent window. Default is null
.
modal
boolean (optional) - Whether this is a modal window. This only works when the
window is a child window. Default is false
.
acceptFirstMouse
boolean (optional) macOS - Whether clicking an
inactive window will also click through to the web contents. Default is
false
on macOS. This option is not configurable on other platforms.
disableAutoHideCursor
boolean (optional) - Whether to hide cursor when typing.
Default is false
.
autoHideMenuBar
boolean (optional) - Auto hide the menu bar unless the Alt
key is pressed. Default is false
.
enableLargerThanScreen
boolean (optional) macOS - Enable the window to
be resized larger than screen. Only relevant for macOS, as other OSes
allow larger-than-screen windows by default. Default is false
.
backgroundColor
string (optional) - The window's background color in Hex, RGB, RGBA, HSL, HSLA or named CSS color format. Alpha in #AARRGGBB format is supported if transparent
is set to true
. Default is #FFF
(white). See win.setBackgroundColor for more information.
hasShadow
boolean (optional) - Whether window should have a shadow. Default is true
.
opacity
number (optional) macOS Windows - Set the initial opacity of
the window, between 0.0 (fully transparent) and 1.0 (fully opaque). This
is only implemented on Windows and macOS.
darkTheme
boolean (optional) - Forces using dark theme for the window, only works on
some GTK+3 desktop environments. Default is false
.
transparent
boolean (optional) - Makes the window transparent.
Default is false
. В Windows не работает до тех пор, пока окно не будет без фрейма.
type
string (optional) - The type of window, default is normal window. See more about
this below.
visualEffectState
string (optional) macOS - Specify how the material
appearance should reflect window activity state on macOS. Must be used
with the vibrancy
property. Возможные значения:
followWindow
- The backdrop should automatically appear active when the window is active, and inactive when it is not. This is the default.
active
- The backdrop should always appear active.
inactive
- The backdrop should always appear inactive.
titleBarStyle
string (optional) - The style of window title bar.
Default is default
. Возможные значения:
default
- Results in the standard title bar for macOS or Windows respectively.
hidden
- Results in a hidden title bar and a full size content window. На macOS в левом верхнем углу окна все еще есть стандартное управление окном ("светофоры"). On Windows and Linux, when combined with titleBarOverlay: true
it will activate the Window Controls Overlay (see titleBarOverlay
for more information), otherwise no window controls will be shown.
hiddenInset
macOS - Results in a hidden title bar
with an alternative look where the traffic light buttons are slightly
more inset from the window edge.
customButtonsOnHover
macOS - Results in a hidden
title bar and a full size content window, the traffic light buttons will
display when being hovered over in the top left of the window.
Note: This option is currently experimental.
titleBarOverlay
Object | Boolean (optional) - When using a frameless window in conjunction with win.setWindowButtonVisibility(true)
on macOS or using a titleBarStyle
so that the standard window controls ("traffic lights" on macOS) are visible, this property enables the Window Controls Overlay JavaScript APIs and CSS Environment Variables. Specifying true
will result in an overlay with default system colors. Default is false
.
color
String (optional) Windows Linux - The CSS color of the Window Controls Overlay when enabled. Default is the system color.
symbolColor
String (optional) Windows - The CSS color of the symbols on the Window Controls Overlay when enabled. Default is the system color.
height
Integer (optional) - The height of the title bar and Window Controls Overlay in pixels. Default is system height.
trafficLightPosition
Point (optional) macOS -
Set a custom position for the traffic light buttons in frameless windows.
roundedCorners
boolean (optional) macOS - Whether frameless window
should have rounded corners on macOS. Default is true
. Setting this property
to false
will prevent the window from being fullscreenable.
thickFrame
boolean (optional) - Use WS_THICKFRAME
style for frameless windows on
Windows, which adds standard window frame. Setting it to false
will remove
window shadow and window animations. Default is true
.
vibrancy
string (optional) macOS - Add a type of vibrancy effect to
the window, only on macOS. Can be appearance-based
, titlebar
, selection
,
menu
, popover
, sidebar
, header
, sheet
, window
, hud
, fullscreen-ui
,
tooltip
, content
, under-window
, or under-page
.
backgroundMaterial
string (optional) Windows - Set the window's
system-drawn background material, including behind the non-client area.
Can be auto
, none
, mica
, acrylic
or tabbed
. See win.setBackgroundMaterial for more information.
zoomToPageWidth
boolean (optional) macOS - Controls the behavior on
macOS when option-clicking the green stoplight button on the toolbar or by
clicking the Window > Zoom menu item. If true
, the window will grow to
the preferred width of the web page when zoomed, false
will cause it to
zoom to the width of the screen. This will also affect the behavior when
calling maximize()
directly. Default is false
.
tabbingIdentifier
string (optional) macOS - Tab group name, allows
opening the window as a native tab. Windows with the same
tabbing identifier will be grouped together. This also adds a native new
tab button to your window's tab bar and allows your app
and window to
receive the new-window-for-tab
event.
When setting minimum or maximum window size with minWidth
/maxWidth
/
minHeight
/maxHeight
, it only constrains the users. It won't prevent you from
passing a size that does not follow size constraints to setBounds
/setSize
or
to the constructor of BrowserWindow
.
The possible values and behaviors of the type
option are platform dependent.
Возможные значения:
- On Linux, possible types are
desktop
, dock
, toolbar
, splash
,
notification
.
- The
desktop
type places the window at the desktop background window level
(kCGDesktopWindowLevel - 1). However, note that a desktop window will not
receive focus, keyboard, or mouse events. You can still use globalShortcut to
receive input sparingly.
- The
dock
type creates a dock-like window behavior.
- The
toolbar
type creates a window with a toolbar appearance.
- The
splash
type behaves in a specific way. It is not
draggable, even if the CSS styling of the window's body contains
-webkit-app-region: drag. This type is commonly used for splash screens.
- The
notification
type creates a window that behaves like a system notification.
- On macOS, possible types are
desktop
, textured
, panel
.
- The
textured
type adds metal gradient appearance. This option is deprecated.
- The
desktop
type places the window at the desktop background window level
(kCGDesktopWindowLevel - 1
). Note that desktop window will not receive
focus, keyboard or mouse events, but you can use globalShortcut
to receive
input sparingly.
- The
panel
type enables the window to float on top of full-screened apps
by adding the NSWindowStyleMaskNonactivatingPanel
style mask,normally
reserved for NSPanel, at runtime. Also, the window will appear on all
spaces (desktops).
- On Windows, possible type is
toolbar
.
События экземпляра
Objects created with new BaseWindow
emit the following events:
Note: Some events are only available on specific operating systems and are
labeled as such.
Событие: 'close'
Возвращает:
Происходит при закрытии окна. It's emitted before the
beforeunload
and unload
event of the DOM. Calling event.preventDefault()
will cancel the close.
Usually you would want to use the beforeunload
handler to decide whether the
window should be closed, which will also be called when the window is
reloaded. In Electron, returning any value other than undefined
would cancel the
close. Например:
window.onbeforeunload = (e) => {
console.log('I do not want to be closed')
e.returnValue = false
}
Note: There is a subtle difference between the behaviors of window.onbeforeunload = handler
and window.addEventListener('beforeunload', handler)
. It is recommended to always set the event.returnValue
explicitly, instead of only returning a value, as the former works more consistently within Electron.
Событие: 'closed'
происходит когда окно приложения закрыто. After you have received this event you should
remove the reference to the window and avoid using it any more.
Event: 'session-end' Windows
Происходит, когда сеанс окна заканчивается из-за выключения, перезагрузки компьютера или отключения сеанса.
Событие: 'blur'
Возвращает:
Происходит, когда окно теряет фокус.
Событие: 'focus'
Возвращает:
Происходит, когда на окне фокусируются.
Событие: 'show'
Происходит, когда отображается окно.
Событие: 'hide'