我有一个在 Windows 上运行的 electrojs 应用程序。当我单击 Windows 通知时,它总是为我的应用程序打开一个新窗口。我如何阻止这个并自己处理窗口创建?
我的代码,在主流程中,如下所示:
let notif = new Notification({
title: ...
body: ...
});
notif.on('click', (e) => {
e.preventDefault(); // Shouldn't this stop windows from opening a new window?
...
});
notif.show();
所有这些都运行良好。将显示通知,并触发单击处理程序。但无论如何都会打开一个新窗口。
我打开新窗口的唯一其他地方是应用程序“激活”,但即使单击通知正在激活应用程序,也永远不会打开第二个窗口。
app.on('activate', () => {
if (app.isReady() && BrowserWindow.getAllWindows().length == 0) {
createWindow();
}
});
更奇怪的是,当我使用
electron-forge start
进行测试时,只有在使用 @electron-forge/maker-appx
进行构建并通过 Windows 商店分发之后,才发生这种情况。
我们最终使用
process.platform
来分离 Mac 和 PC 通知处理。然后在电脑上手动设置toastXml
。
这似乎有效,并且单击时不会打开新窗口。
let notif = new Notification({
silent: true,
toastXml: `
<toast activationType="protocol" launch="myapp://app/${route}">
<visual>
<binding template="ToastGeneric">
<text>${title}</text>
<text>${body}</text>
</binding>
</visual>
</toast>`
});
notif.show();