首頁>技術>

Main Process API

Electron API (Electron API 有三種)Main Process (主進程序)Renderer Process(渲染程序)Share Modules(共享模組)

App事件ready:

當 Electron 完成初始化時被觸發。

兩種使用方法
app.on('ready', createWindow)app.on('ready', () => { console.log('App is ready!') createWindow()})
檢查應用是否登入:app.isReady()如果應用沒有Ready,app.isReady()的值為 false
console.log('應用是否登入:' + app.isReady())
此時應用應該已經Ready
setTimeout(() => { console.log('應用是否登入:' + app.isReady())}, 2000)
before-quit

在應用程式開始關閉視窗之前觸發。

app.on('before-quit', (e) => { console.log('App is quiting') e.preventDefault()})
browser-window-blur

在 browserWindow 失去焦點時發出

app.on('browser-window-blur', (e) => { console.log('App unfocused')})
browser-window-focus

在 browserWindow 獲得焦點時發出

app.on('browser-window-focus', (e) => { console.log('App focused')})
方法app.quit()
app.on('browser-window-blur', (e) => { setTimeout(() => { app.quit() }, 3000)})app.on('browser-window-blur', (e) => { setTimeout(app.quit, 3000)})
app.getPath(name)
app.on('ready', () => { console.log(app.getPath('desktop')) console.log(app.getPath('music')) console.log(app.getPath('temp')) console.log(app.getPath('userData')) createWindow()})
BrowserWindow

electron.BrowserWindow: 建立和控制瀏覽器視窗

例項方法

win.loadURL(url[, options]): 和 loadFile 互斥

mainWindow.loadURL('https://www.baidu.com')
優雅的顯示視窗使用ready-to-show事件
let mainWindow = new BrowserWindow({ show: false })mainWindow.once('ready-to-show', () => { mainWindow.show()})
設定 backgroundColor
let win = new BrowserWindow({ backgroundColor: '#2e2c29' })
父子視窗視窗定義
secondaryWindow = new BrowserWindow({ width: 600, height: 600, webPreferences: { nodeIntegration: true }})secondaryWindow.loadFile('index.html')secondaryWindow.on('closed', () => { mainWindow = null})
視窗關係
secondaryWindow = new BrowserWindow({ parent: mainWindon, // 定義父視窗 modal: true // 鎖定在主視窗})
子視窗顯示和隱藏
secondaryWindow = new BrowserWindow({ show: false})setTimeout(() => { secondaryWindow.show() setTimeout(() => { secondaryWindow.hide() }, 3000)}, 2000)
無邊框視窗

Frameless Window

mainWindow = new BrowserWindow({ frame: false})

讓頁面可拖拽

<body style="user-select: none; -webkit-app-region:drag;">

no-drag 修復下面控制元件的bug

<input style="-webkit-app-region: no-drag;" type="range" name="range" min="0" max="10">

顯示紅綠燈

mainWindow = new BrowserWindow({ titleBarStyle: 'hidden' // or hiddenInset 距離紅綠燈更近})
屬性與方法minWidth && minHeight
mainWindow = new BrowserWindow({ minWidth: 300, minHeight: 300})

更多詳見:/file/2020/08/28/20200828172223_1.jpg = new BrowserWindow({ width: 400, height: 300, webPreferences: { nodeIntegration: true },})mainWindow.on('focus', () => { console.log('mainWindow focused')})secWindow.on('focus', () => { console.log('secWindow focused')})app.on('browser-window-focus', () => { console.log('App focused')})靜態方法getAllWindows()

let allWindows = BrowserWindow.getAllWindows()console.log(allWindows)

更多詳見: /file/2020/08/28/20200828172224_2.jpg () => { mainWindow.maximize() })更多詳見:/file/2020/08/28/20200828172225_3.jpg 儲存視窗的狀態 npm install electron-window-state

webContents

webContents 是 EventEmitter 的例項, 負責渲染和控制網頁, 是 BrowserWindow 物件的一個屬性。let wc = mainWindow.webContents console.log(wc)

起步建立session物件
let session = mainWindow.webContents.sessionconsole.log(session) // {}
在chromium 建立localStorage,然後建立兩個視窗,兩個session共享
mainWindow = new BrowserWindow({ width: 1000, height: 800, webPreferences: { nodeIntegration: true }})secWindow = new BrowserWindow({ width: 500, height: 400, webPreferences: { nodeIntegration: true }})let session = mainWindow.webContents.sessionlet session2 = mainWindow.webContents.sessionconsole.log(Object.is(session, session2)) // true// Load index.html into the new BrowserWindowmainWindow.loadFile('index.html')secWindow.loadFile('index.html')// Open DevTools - Remove for PRODUCTION!mainWindow.webContents.openDevTools();secWindow.webContents.openDevTools();// Listen for window being closedmainWindow.on('closed', () => { mainWindow = null})secWindow.on('closed', () => { secWindow = null})
defaultSession
const {app, BrowserWindow, session} = require('electron')let ses = mainWindow.webContents.sessionconsole.log(Object.is(session.defaultSession, ses)) // true
自定義session
let customSes = session.fromPartition('part1')console.log(Object.is(customSes, ses)) //false, 此時customSes 還是共享sessionsecWindow = new BrowserWindow({ width: 500, height: 400, webPreferences: {  nodeIntegration: true, session: customSes // 定義session, 此時子視窗有自己的session }})// 在子窗口裡建立localstorge: winName/secWindow// 關閉所有視窗,發現建立的localstorage又消失了,因為此時的session儲存在記憶體裡,重新啟動應用又消失了。可以加字首persist,使其變為永久儲存:let customSes = session.fromPartition('persist:part1')// 或者:secWindow = new BrowserWindow({ width: 500, height: 400, webPreferences: {  nodeIntegration: true, - session: customSes + partition: 'persist:part1' }})
例項方法
ses.clearStorageData() // 刪除主視窗的的storage
cookie

查詢和修改一個會話的cookies

// 查詢所有 cookiessession.defaultSession.cookies.get({}) .then((cookies) => { console.log(cookies) }).catch((error) => { console.log(error) })// 查詢所有與設定的 URL 相關的所有 cookiessession.defaultSession.cookies.get({ url: 'http://www.github.com' }) .then((cookies) => { console.log(cookies) }).catch((error) => { console.log(error) })// 設定一個 cookie,使用設定的名稱;// 如果存在,則會覆蓋原先 cookie.const cookie = { url: 'http://www.github.com', name: 'dummy_name', value: 'dummy' }session.defaultSession.cookies.set(cookie) .then(() => { // success }, (error) => { console.error(error) })
downloadItem

控制來自於遠端資源的檔案下載。

const {app, BrowserWindow, dialog} = require('electron')mainWindow.webContents.on('did-finish-load', () => { dialog.showOpenDialog({ buttonLabel: '選擇', defaultPath: app.getPath('desktop'), properties: ['multiSelections', 'createDirectory', 'openFile', 'openDirectory'] }, filepaths => { console.log(filepaths) })})dialog.showSaveDialog({}, filename => { console.log(filename)})const answers = ['Yes', 'No', 'Maybe']dialog.showMessageBox({ title: 'Message Box', message: 'Please select an option', detail: 'Message details.', buttons: answers}, response => { console.log(`User selected: ${answers[response]}`)})
快捷鍵+系統快捷鍵

快捷鍵:定義鍵盤快捷鍵。 系統快捷鍵:在應用程式沒有鍵盤焦點時,監聽鍵盤事件。

快捷鍵可以包含多個功能鍵和一個鍵碼的字串,由符號+結合,用來定義你應用中的鍵盤快捷鍵

示例:

CommandOrControl+ACommandOrControl+Shift+Z

快捷方式使用 register 方法在 globalShortcut 模組中註冊。

globalShortcut 模組可以在作業系統中註冊/登出全域性快捷鍵, 以便可以為操作定製各種快捷鍵。

注意: 快捷方式是全域性的; 即使應用程式沒有鍵盤焦點, 它也仍然在持續監聽鍵盤事件。 在應用程式模組發出 ready 事件之前, 不應使用此模組。

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Laravel高併發調優筆記