2015-07-01 3 views
1

Я работаю с Notification API, но я не могу заставить его работать с SetInterval(), может кто-нибудь указать, что я делаю неправильно. Пока я нажимаю событие, уведомление отображается только один раз. Вот мой код:Использование setInterval и JavaScript

document.addEventListener('DOMContentLoaded', function() { 
document.getElementById('notifyBtn').addEventListener('click', function() { 

    if (!('Notification' in window)) { 
     alert('Web Notification is not supported'); 
     return; 
    } else { 
     setInterval(Notification.requestPermission(function(permission) { 
      var notification = new Notification("Hi there!", { 
       body: 'I am here to talk about HTML5 Web Notification API', 
       icon: 'icon.png', 
       dir: 'auto' 
      }); 
      setTimeout(function() { 
       notification.close(); 
      }, 2000); 
     }),5000); 

    } 
    ; 
}); 
}); 

Я действительно застрял здесь, пожалуйста, остановитесь.

+0

ли вы проверить, если консоль бросает ошибку? –

+0

Я уверен, что ваша функция setInterval неверна –

ответ

4

Вам необходимо пройти действительный обратный звонок по адресу setInterval(). Вместо этого вы передаете результат определенного метода. Попробуйте это:

setInterval(function() { 
    Notification.requestPermission(function(permission) { 
     var notification = new Notification("Hi there!", { 
      body: 'I am here to talk about HTML5 Web Notification API', 
      icon: 'icon.png', 
      dir: 'auto' 
     }); 
     setTimeout(notification.close, 2000); 
    })}, 5000); 

Bonus: смотри, как я упростил свой setTimeout обратного вызова, просто передавая notification.close метод сам, вместо того, чтобы называть его в анонимной функции. Гораздо чище.

+0

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

+0

Добро пожаловать. Попытайтесь понять анонимные функции и объекты функций, они очень важны в JavaScript. –

0

Оберните ваш метод в анонимной функции

document.addEventListener('DOMContentLoaded', function() { 
document.getElementById('notifyBtn').addEventListener('click', function() { 

    if (!('Notification' in window)) { 
     alert('Web Notification is not supported'); 
     return; 
    } else { 
     setInterval(function(){Notification.requestPermission(function(permission) { 
      var notification = new Notification("Hi there!", { 
       body: 'I am here to talk about HTML5 Web Notification API', 
       icon: 'icon.png', 
       dir: 'auto' 
      }); 
      setTimeout(function() { 
       notification.close(); 
      }, 2000); 
     })},5000); 

    } 
    ; 
}); 
}); 
+0

спасибо, было очень полезно. ;) – RedPanda

0

я нашел что-то вроде этого:

document.addEventListener('DOMContentLoaded', function() { 
document.getElementById('notifyBtn').addEventListener('click', function() { 
    if (!('Notification' in window)) { 
     alert('Web Notification is not supported'); 
     return; 
    } else { 
     setInterval(notify, 5000); 
    } 
}); 
function notify() { 
    Notification.requestPermission(function(permission) { 
      var n = new Notification("Hi there!", { 
       body: 'I am here to talk about HTML5 Web Notification API', 
       icon: 'icon.png', 
       dir: 'auto' 
      }) 
      setTimeout(function(){n.close()}, 2000) 
     }) 

} 
+0

Вы должны добавить bool и if, чтобы предотвратить множественный вызов. – Sacreyoule

Смежные вопросы