網(wǎng)站建設6000元真實的優(yōu)化排名
用?electron
?開發(fā)軟件,在設置了?globalShortcut
?快捷鍵后,在當前開發(fā)的軟件上調(diào)用快捷鍵正常,但是當焦點不在當前軟件時,在使用快捷鍵,好些時候會報錯。大概率與系統(tǒng)快捷鍵產(chǎn)生沖突或者快鍵鍵控制的回調(diào)里獲取的內(nèi)容,需在軟件聚焦時才可獲取到。
開始我設置快鍵鍵的方式:
function createWindow () {// 隱藏窗體頂部菜單Menu.setApplicationMenu(null)/*** Initial window options*/mainWindow = new BrowserWindow({width: 1338, // 寬height: 839, // 高minWidth: 1024,minHeight: 600,useContentSize: true,show: false, // 創(chuàng)建后是否顯示frame: false, // 添加后自定義標題//自定義邊框center: true, // 是否出現(xiàn)在屏幕居中的位置fullscreenable: platform === 'darwin',resizable: false, // 可否縮放movable: true, // 可否移動maximizable: false,minimizable: false,title: '當前項目名稱', // 默認窗口標題transparent: false, // 是否是透明窗口(僅macOS)// vibrancy: 'ultra-dark', // 窗口模糊的樣式(僅macOS)backgroundColor: 'none', // 背景色,用于transparent和frameless窗口hasShadow: true, // Boolean (可選) - 窗口是否有陰影. 僅在 macOS 上支持. 默認值為 truetitleBarStyle: 'hidden',webPreferences: {nodeIntegration: true,webSecurity: false, // electron窗體跨域方案backgroundThrottling: false // 當頁面被置于非激活窗口的時候是否停止動畫和計時器}})mainWindow.setMenu(null) // 隱藏菜單欄if (platform === 'darwin') {Menu.setApplicationMenu(Menu.buildFromTemplate([]))}mainWindow.loadURL(winURL)mainWindow.on('ready-to-show', function () {mainWindow.show() // 初始化后再顯示})mainWindow.on('closed', () => {mainWindow = null})
}app.on('window-all-closed', () => {if (process.platform !== 'darwin') {app.quit()}
})app.on('ready', createWindow)app.on('activate', () => {if (mainWindow === null) {createWindow()}
})app.whenReady().then(() => {// 設置快捷鍵globalShortcut.register('CommandOrControl+Alt+T', () => {const currentWindow = BrowserWindow.getFocusedWindow()currentWindow.webContents.openDevTools()})
})app.on('will-quit', () => {// 注銷所有快捷鍵globalShortcut.unregisterAll()
})
但是這樣在失去焦點時,windows和mac下都會報錯:
原因是:const currentWindow = BrowserWindow.getFocusedWindow() 方法需
在當前軟件聚焦時才可正常調(diào)用。
將?const currentWindow = BrowserWindow.getFocusedWindow() 改為?
mainWindow.webContents.openDevTools()
// 將 const currentWindow = BrowserWindow.getFocusedWindow() 改為以下代碼
mainWindow.webContents.openDevTools()
這種改法在windows下正常,但是mac下關閉程序,程序在Dock中還在,這是使用這種方式依然會報錯,這是因為我們沒有再mac環(huán)境下在程序關閉的時候注銷快捷鍵。所以我們需要再window-all-closed補充上mac環(huán)境下的處理。
function createWindow () {// 隱藏窗體頂部菜單Menu.setApplicationMenu(null)/*** Initial window options*/mainWindow = new BrowserWindow({width: 1338, // 寬height: 839, // 高minWidth: 1024,minHeight: 600,useContentSize: true,show: false, // 創(chuàng)建后是否顯示frame: false, // 添加后自定義標題//自定義邊框center: true, // 是否出現(xiàn)在屏幕居中的位置fullscreenable: platform === 'darwin',resizable: false, // 可否縮放movable: true, // 可否移動maximizable: false,minimizable: false,title: '當前項目名稱', // 默認窗口標題transparent: false, // 是否是透明窗口(僅macOS)// vibrancy: 'ultra-dark', // 窗口模糊的樣式(僅macOS)backgroundColor: 'none', // 背景色,用于transparent和frameless窗口hasShadow: true, // Boolean (可選) - 窗口是否有陰影. 僅在 macOS 上支持. 默認值為 truetitleBarStyle: 'hidden',webPreferences: {nodeIntegration: true,webSecurity: false, // electron窗體跨域方案backgroundThrottling: false // 當頁面被置于非激活窗口的時候是否停止動畫和計時器}})mainWindow.setMenu(null) // 隱藏菜單欄if (platform === 'darwin') {Menu.setApplicationMenu(Menu.buildFromTemplate([]))}mainWindow.loadURL(winURL)mainWindow.on('ready-to-show', function () {mainWindow.show() // 初始化后再顯示// 注冊快捷鍵globalShortcut.register('CommandOrControl+Alt+T', () => {mainWindow.webContents.openDevTools()})})mainWindow.on('closed', () => {mainWindow = null})
}app.on('window-all-closed', () => {if (process.platform !== 'darwin') {// windows下調(diào)用退出方法app.quit()} else {// mac環(huán)境注銷所有快捷鍵globalShortcut.unregisterAll()}
})app.on('ready', createWindow)app.on('activate', () => {if (mainWindow === null) {createWindow()}
})// 退出程序
app.on('will-quit', () => {// windows注銷所有快捷鍵globalShortcut.unregisterAll()
})
正確邏輯的核心代碼:
mainWindow.on('ready-to-show', function () {mainWindow.show() // 初始化后再顯示// 注冊快捷鍵globalShortcut.register('CommandOrControl+Alt+T', () => {mainWindow.webContents.openDevTools()})})app.on('window-all-closed', () => {if (process.platform !== 'darwin') {// windows下調(diào)用退出方法app.quit()} else {// mac環(huán)境注銷所有快捷鍵globalShortcut.unregisterAll()}
})// 退出程序
app.on('will-quit', () => {// windows環(huán)境注銷所有快捷鍵globalShortcut.unregisterAll()
})