electron で通知を使う(Notification)
デスクトップアプリをさっくり作れてしまう electron ですが、通知に関してドハマリしました。お役に立てるかどうか微妙な情報ですが、まとめておきます。
投稿するつもりなんて全然なかったんですが、「下書き多すぎ」ってシステムに叱られたんで公開することにしました
electron の通知(Notification)種類
electron の通知システムは呼び出し場所により大きく2種類に別れます。
renderer process で利用
HTML5 Notification API を利用することが出来ます。
Notifications (Windows, Linux, macOS)
main process で利用
Class: Notification が用意されています。
Create OS desktop notifications
ここから本題
上記の2つのうちのどちらかで対応できれば幸せなのですが、実は Windows10 の環境で「通知がされない」という、不具合を踏んでしまいました。。。
手元の環境(Windows7)では通知され、Windows10 でも一部の環境では動いてしまったので、かなり困りました^^;
Notification API do not work with Windows 10 16299.19 (fall creators update) #10864
色々原因があるようで、対処方法もきちんとクローズされているものからおまじないレベルまで様々です。
解決方法
当方豪腕なので、当然力技代替案ですw
ちっちゃいフレームなしブラウザを表示することで対応しました。
main process に「通知ブラウザ」を用意します。
const { screen } = require('electron');
const { width, height } = screen.getPrimaryDisplay().workAreaSize
notifyWindow = new BrowserWindow({
title: "notify message",
frame: false,
show: false,
x: width - 290,
y: height - 120,
width: 280,
height: 80,
icon: path.join(__dirname, '/public/icon.png'),
setMenu: null,
skipTaskbar:true
});
notifyWindow.loadURL(url.format({
pathname: path.join(__dirname, 'notify.html'),
}))
notifyWindow.setAlwaysOnTop(true)
あとは、条件合致で show してあげればよいです。
electron 利用アプリで正しく通知できているものもあるので、根治できる気もしますが、趣味のアプリであればさっさと見切りつけて代替案採用したほうが手っ取り早いです。
おまけ
条件合致で show する時に、音出したい場合はブラウザ起動時にオプションを追加して上げる必要があります。
DOMException: play() failed because the user didn't interact with the document first. #14323
const {
app,
BrowserWindow,
ipcMain
} = require('electron')
app.commandLine.appendSwitch('--autoplay-policy','no-user-gesture-required')
Author And Source
この問題について(electron で通知を使う(Notification)), 我々は、より多くの情報をここで見つけました https://qiita.com/te2ji/items/1c14b4991f67eb00594e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .