如何在电子应用程序上实现通知API ?
我尝试检查Notification.permission
,它返回granted
但是当我试着跑的时候:
new Notification("FOO", {body:"FOOOOOOOOOOOOOOOOOOOOOOOOO"});
什么也不会发生。它得到支持了吗?
一个好的方法是使用node-notifier进行通知,因为该包具有跨平台通知支持
注意:由于这是一个HTML5 API,它只在渲染器进程中可用。
的例子:
let myNotification = new Notification('Title', {
body: 'Lorem Ipsum Dolor Sit Amet'
})
myNotification.onclick = () => {
console.log('Notification clicked')
}
Windows
在Windows 10上,通知"只是工作"。
在Windows 8.1和Windows 8上,你的应用程序的快捷方式,与应用程序用户模型ID,必须安装到开始屏幕。但是,请注意,它不需要固定在开始屏幕上。
在Windows 7中,不支持通知。然而,你可以使用Tray API发送"气球通知"。
此外,通知正文的最大长度为250个字符,Windows团队建议通知应保持在200个字符。
更多信息:https://github.com/electron/electron/blob/master/docs/tutorial/desktop-environment-integration.md#notifications-windows-linux-os-x
HTML5 Notification
API仅在渲染器进程中可用。
如果你想使用主进程的通知,你必须require
电子通知API。API与标准/HTML5版本不同。
const {Notification} = require('electron');
new Notification({
title: 'Headline',
body: 'Here write your message'
}).show();
通知API不能在Windows上工作,因为没有通知API可以在所有版本的Windows上工作(实际上Win10是第一个桌面有文档API的版本,Win8)。
张贴一个更新的答案,电子在他们的教程中有一节关于他们的通知和如何处理Windows
Windows
- 在Windows 10中,必须在开始菜单中安装带有应用程序用户模型ID的应用程序快捷方式。在开发过程中,这可能是多余的,所以在开始菜单中添加node_moduleselectrondistelectron.exe也可以达到目的。在资源管理器中导航到文件,右键单击"固定到开始菜单"。然后你需要在你的主进程中添加app.setAppUserModelId(process. execpath)行来查看通知。
- 在Windows 8.1和Windows 8中,必须在开始界面安装带有应用程序用户模型ID的应用程序快捷方式。注意,但是,它不需要固定在开始屏幕。
- 在Windows 7上,通知通过自定义实现工作,在视觉上类似于新系统上的本地实现。Electron尝试将围绕应用程序用户模型ID的工作自动化。当Electron与安装和更新框架Squirrel一起使用时,快捷方式将自动正确设置。此外,Electron将检测到Squirrel被使用,并将使用正确的值自动调用app.setAppUserModelId()。在开发过程中,您可能需要自己调用app.setAppUserModelId()。
此外,在Windows 8中,通知正文的最大长度是250个字符,Windows团队建议通知应保持在200个字符。也就是说,Windows 10已经取消了这个限制,Windows团队要求开发人员保持理性。尝试向API发送大量文本(数千个字符)可能会导致不稳定。
对于window 7,你可以试试这个:https://github.com/blainesch/electron-notifications -它生成"桌面"通知作为单独的电子窗口。它看起来很光滑;我现在就要实施它了。我相信你需要使用https://github.com/electron/electron/blob/master/docs/api/ipc-main.md之类的东西来在你的应用程序和主电子进程之间进行通信,主电子进程将负责显示和管理通知,除非你的主电子进程已经负责通知逻辑。
use
const notification = new window.Notification(
'LO SIENTO OCURRIO EL ERROR:',
{
body: error,
}
);
notification.onclick = () => console.log('Clicked');
notification.onclose = () => console.log('Closed');