大家好。我实际上是在开发一个简单的Electron应用程序,该应用程序具有透明的背景并具有鲜艳的效果。
直到这里一切都还好。问题在于,我需要在new BrowserWindow()
函数中将振动效果主题指定为参数,该函数仅在生成窗口时运行。
所以发生的事情是,在生成窗口时,它会检查实际主题,例如,如果外观主题为深色,它将为背景提供dark-vibrancy
效果,但是如果我更改外观,则在应用程序运行时会更改外观,因为已经生成了窗口,所以它不会更改外观。
我想我可以让该应用订阅'AppleInterfaceThemeChangedNotification'
事件,然后重新加载窗口,但是我不希望我的应用关闭该窗口然后再次打开它,从而导致用户例如,丢失未保存的工作。
Here,您会看到一个 Misive 应用程序的示例,当外观发生变化时,该应用程序会从暗色主题过渡到亮色主题。
因此,简要解释一下,我想知道在用户更改主题时是否有一种方法可以更改振动效果主题(深色或浅色),而无需关闭窗口并再次打开它。
我该如何实现?
任何帮助将不胜感激。
我的代码:
创建窗口功能:
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({ width: 1000, height: 650, titleBarStyle: 'hidden', vibrancy: systemPreferences.isDarkMode() ? 'dark' : 'light' });
mainWindow.loadURL(isDev ? 'http://localhost:3000' : `file://${path.join(__dirname, '../build/index.html')}`);
mainWindow.webContents.on('new-window', function(e, url) {
e.preventDefault();
require('electron').shell.openExternal(url);
});
mainWindow.on('closed', () => mainWindow = null);
mainWindow.setMenu(null)
}
app.on('ready', createWindow);
注意1 : 我还注意到,如果出于任何原因重新加载窗口,则会禁用振动效果:
注意2 :另外,似乎macOS Catalina(我正在使用的版本)上存在一个错误,该错误使systemPreferences.isDarkMode()
始终返回false
,所以我没有无法正确测试。 GitHub Issue