Как одновременно запустить оповещение JavaScript и уведомление в Electron? - PullRequest
0 голосов
/ 02 апреля 2020

Я использую веб-приложение, созданное с помощью Electron.

Код ниже использует электронное уведомление let myNotification для системных уведомлений OSX. И JS alert отправляет обычное предупреждение в окно приложения.

   var timerIDtwo = setInterval(function() {
    if (navigator.onLine) {
         var date = new Date();
         var time = date.toLocaleTimeString();
         let myNotification = new Notification('TRENUTNO STE ONLINE!', {
                                      body: 'Baza podataka je dostupna!\n\nVrijeme poruke:'+time
                                    });
        alert('TRENUTNO STE ONLINE!\n\nBaza podataka je dostupna!\n\nVrijeme poruke: '+time); 
        //     clearInterval(timerID);
} else {
//else
}
}, 10 * 1000);

Проблема:

Уведомление ОС запускается ТОЛЬКО после того, как я нажимаю ОК в сообщении с предупреждением. Он должен стрелять одновременно и не зависеть друг от друга. Как только я удаляю друг друга, все работает нормально.

Я пытался отделить одну новую функцию друг от друга и всякие такие вещи, как изменение порядка и т. Д., Но он всегда срабатывает после закрытия оповещения.

Пожалуйста, сообщите.

РЕДАКТИРОВАТЬ: Если я разделяю их и сначала запускаю уведомление, оно срабатывает как желаемое уведомление, затем 2 se c позднее предупреждение, но следующее уведомление срабатывает снова только после того, как предупреждение закрыто.

<script type="text/javascript">
   var timerID = setInterval(function() {
    if (navigator.onLine) {
         var date = new Date();
         var time = date.toLocaleTimeString();
         let myNotification = new Notification('TRENUTNO STE ONLINE!', {
                                      body: 'Baza podataka je dostupna!\n\nVrijeme poruke:'+time
                                    });
} else {
//
}
}, 10 * 1000); 
</script>


<script type="text/javascript">
   var timerID = setInterval(function() {
    if (navigator.onLine) {
         var date = new Date();
         var time = date.toLocaleTimeString();
        alert('TRENUTNO STE ONLINE!\n\nBaza podataka je dostupna!\n\nVrijeme poruke: '+time); 
        //     clearInterval(timerID);
} else {
//
}
}, 12 * 1000); 
</script>

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Как указано в другом ответе, выполнение в процессе визуализации приостанавливается, когда вы вызываете alert().

. Чтобы обойти это ограничение, вы можете использовать Electron's Notification API для вызова уведомления от основного процесса.

Используйте IP C для связи от вашего средства визуализации к основному процессу, который вы будете sh вызывать для уведомления.

// main.js
const { Notification, ipcMain } = require('electron')

ipcMain.on('notification', () => {
  const n = new Notification({
    title: "Notification",
    body: "Not blocked by alert!"
  });
  n.show()
})
// renderer.js
const { ipcRenderer } = require('electron')

ipcRenderer.send('notification')
alert('I am an alert.')

Несмотря на то, что процесс рендеринга все еще будет заблокирован после выполнения alert, основной процесс не затронут и сможет инициировать уведомление.

См. Этот запускаемый пример открывается в Электронная скрипка .

0 голосов
/ 02 апреля 2020

Предупреждение останавливает сценарий. Сделай свой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...