BrowserWindow模块是用于创建和管理图形用户界面的窗口。它提供了一种在桌面应用程序中创建原生窗口的方式,类似于浏览器中的窗口。
const { app, BrowserWindow } = require('electron')
app.on('ready', () => {
// 创建一个 宽800高600的窗口
const win = new BrowserWindow({ width: 800, height: 600 })
})
width
:窗口的宽度(以像素为单位)。height
:窗口的高度(以像素为单位)。x
:窗口的左上角 x 坐标。y
:窗口的左上角 y 坐标。center
:布尔值,指定是否将窗口居中显示。minWidth
:窗口的最小宽度。minHeight
:窗口的最小高度。maxWidth
:窗口的最大宽度。maxHeight
:窗口的最大高度。resizable
:布尔值,指定是否允许用户调整窗口大小。movable
:布尔值,指定是否允许用户移动窗口。closable
:布尔值,指定是否显示关闭按钮。alwaysOnTop
:布尔值,指定窗口是否始终显示在其他窗口之上。fullscreen
:布尔值,指定窗口是否全屏显示。fullscreenable
:布尔值,指定窗口是否可以进入全屏模式。title
:窗口的标题。backgroundColor
:窗口的背景颜色。frame
:布尔值,指定是否显示窗口的边框和标题栏。show
:布尔值,指定创建窗口后是否立即显示。webPreferences
:对象,用于配置网页的相关选项,例如启用 Node.js 集成、使用上下文隔离等。这只是一些常见的配置项,还有其他可用的选项可以根据您的需求进行配置。您可以查阅 Electron 的官方文档以获取更详细的配置项列表和说明:https://www.electronjs.org/zh/docs/latest/api/browser-window#new-browserwindowoptions
const win = new BrowserWindow({
width: 800,
height: 600,
backgroundColor: 'skyblue',
resizable:false,
fullscreenable:false
})
绑定事件我们可以使用 on()
方法或者once()
方法。once()
方法用来注册一次性事件。
closed
: 当窗口关闭时触发此事件。close
: 在关闭窗口之前触发此事件。可以在此事件的处理程序中执行清理操作或阻止窗口关闭。show
: 当窗口被显示时触发此事件。hide
: 当窗口被隐藏时触发此事件。minimize
: 当窗口被最小化时触发此事件。maximize
: 当窗口被最大化时触发此事件。restore
: 当窗口从最大化或最小化状态恢复时触发此事件。resize
: 当窗口大小发生改变时触发此事件。move
: 当窗口位置发生改变时触发此事件。focus
: 当窗口获取焦点时触发此事件。blur
: 当窗口失去焦点时触发此事件。enter-full-screen
: 当窗口进入全屏模式时触发此事件。leave-full-screen
: 当窗口退出全屏模式时触发此事件。const { app, BrowserWindow } = require('electron')
app.on('ready', () => {
// 创建一个窗口
const win = new BrowserWindow({ width: 800, height: 600 })
win.on('close', () => {
console.log('窗口马上要关闭了');
})
win.on('closed', () => {
console.log('窗口关闭了');
})
win.on('show', () => {
console.log('窗口显示了');
})
win.on('hide', () => {
console.log('窗口隐藏了');
})
win.on('minimize', () => {
console.log('窗口最小化了');
})
win.on('maximize', () => {
console.log('窗口最大化了');
})
win.on('restore', () => {
console.log('窗口从最大化或最小化变回去了了');
})
win.on('resize', () => {
console.log('窗口尺寸改变了');
})
win.on('move', () => {
console.log('窗口位置改变了');
})
win.on('focus', () => {
console.log('窗口获得焦点了');
})
win.on('blur', () => {
console.log('窗口失去焦点了');
})
win.on('enter-full-screen', () => {
console.log('窗口进入全屏了');
})
win.on('leave-full-screen', () => {
console.log('窗口退出全屏了');
})
})
这只是一些常见的生命周期事件示例,还有其他事件可以根据需要使用。您可以根据 Electron 的文档详细了解每个事件的用法和触发时机。
ready-to-show
事件当您创建一个新的 BrowserWindow 对象并加载内容后,窗口需要一些时间来完成渲染和准备显示。一旦窗口准备好显示,ready-to-show
事件将被触发,表示窗口已经可以显示给用户了。
我们创建一个窗口,主要是为了在它里面渲染页面,比如我们的代码可能是这样的:
const { app, BrowserWindow } = require('electron')
app.on('ready', () => {
// 创建一个窗口
const win = new BrowserWindow({ width: 800, height: 600 })
// 加载页面文件
win.loadFile('index.html')
})
上面的代码,我们创建一个窗口,然后在窗口里面渲染index.html
的内容。但是,这样写代码会有一个问题:我们创建完窗口,就会立即显示出来,加载index.html
紧随其后,但是这中间会有个时间间隔,会出现一瞬间的白屏现象,我了解决这个问题,我们可以在创建窗口的时候,不让窗口显示,当窗口准备好在进行窗口显示。我们的代码可以这样修改:
const { app, BrowserWindow } = require('electron')
app.on('ready', () => {
const win = new BrowserWindow({
width: 800,
height: 600,
// 创建完不显示
show: false
})
win.loadFile('index.html')
// 注册一个一次性事件
win.once('ready-to-show', () => {
// 显示窗口
win.show()
})
})
loadFile(filePath[, options])
用于加载本地文件到窗口中。loadURL(url)
加载指定的 URL 到窗口中。可以是本地文件路径或远程 URL。webContents
返回窗口的 WebContents
对象,它提供了对窗口中加载的网页内容的控制和交互。close()
关闭窗口。destroy()
销毁窗口及其关联的资源。focus()
将焦点设置到窗口。show()
显示窗口。hide()
隐藏窗口。maximize()
最大化窗口。minimize()
最小化窗口。restore()
还原窗口大小,如果窗口当前是最大化或最小化状态。isMaximized()
返回一个布尔值,表示窗口是否处于最大化状态。isMinimized()
返回一个布尔值,表示窗口是否处于最小化状态。isFullScreen()
返回一个布尔值,表示窗口是否处于全屏模式。setFullScreen(flag)
将窗口设置为全屏模式。flag
为true
表示全屏,为false
表示退出全屏。setResizable(flag)
设置窗口是否可调整。flag
是一个布尔值。setPosition(x, y)
设置窗口的位置,x
和 y
是窗口的坐标。getParentWindow()
返回当前窗口的父窗口,如果存在的话。getChildWindows()
返回当前窗口的所有子窗口的数组isModal()
返回一个布尔值,表示窗口是否是模态窗口。BrowserWindow 模块的常见的实例方法有好几十个,这里只是列出几个,更多的可以查看文档。
当我们在 Electron 中创建一个窗口时,窗口中的网页内容由 WebContents
对象表示。每个 BrowserWindow
实例都关联一个 WebContents
实例,它充当了与窗口中加载的网页进行交互的接口。它的文档地址:https://www.electronjs.org/zh/docs/latest/api/web-contents
WebContents
提供了一系列方法和事件,使您能够对窗口中的网页进行广泛的控制和操作,它的角色和功能比较类似于我们在浏览器中的 BOM
对象,用于控制窗口中加载的网页内容和与之进行交互。但它并不完全等同于 BOM 对象。
用大白话来说就是:BrowserWindow 实例操作的是窗口,WebContents操作的是窗口内渲染的网页内容。
const win = new BrowserWindow({
width: 800,
height: 600,
})
console.log(win.webContents);
did-finish-load
当窗口中的网页加载完成时触发。dom-ready
当窗口中的网页文档完成解析并可供操作时触发。did-fail-load
当窗口中的网页加载失败时触发。did-start-loading
当窗口开始加载网页时触发。did-stop-loading
当窗口停止加载网页时触发。page-title-updated
当窗口中的网页标题发生变化时触发。did-navigate
当窗口中的网页导航到新的 URL 时触发。did-navigate-in-page
当窗口中的网页发生内部导航(锚点跳转等)时触发。did-frame-finish-load
当一个子框架加载完成时触发。did-start-navigation
当窗口开始导航到新的 URL 时触发。did-stop-navigation
当窗口停止导航时触发。will-navigate
当窗口即将导航到新的 URL 时触发。 const win = new BrowserWindow({
width: 800,
height: 600,
})
win.loadFile('index.html')
win.webContents.on('dom-ready', () => {
console.log('DOM解析完毕');
})
win.webContents.on('did-finish-load', () => {
console.log('网页加载完毕');
})
以上仅列出部分事件,更多的可以参考其官方文档。
loadURL(url[, options])
加载指定的 URL 到窗口中,可以是本地文件路径或远程 URL。reload()
重新加载窗口中的网页。goBack()
在网页浏览历史记录中后退一个页面。goForward()
在网页浏览历史记录中前进一个页面。stop()
停止窗口中正在加载的网页。executeJavaScript(code[, userGesture])
在窗口中执行给定的 JavaScript 代码。insertCSS(css)
将指定的 CSS 代码注入到窗口中加载的网页中。openDevTools([options])
打开开发者工具,用于调试和检查窗口中的网页内容。closeDevTools()
关闭开发者工具。getTitle()
获取窗口中当前加载的网页的标题。getURL()
获取窗口当前加载的网页的 URL。isLoading()
检查窗口中是否正在加载网页。isDestroyed()
检查 WebContents
对象是否已被销毁。clearHistory()
清除窗口中网页的导航历史记录。其它更多方法,请参看文档。
const win = new BrowserWindow({
width: 800,
height: 600,
})
win.loadFile('index.html')
win.webContents.loadFile('html/test.html')
参考文档:https://www.electronjs.org/zh/docs/latest/api/browser-window