2015-07-01 54 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); 

    } 
    ; 
}); 
}); 

我真的被卡住了,请halp。

+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); 

奖励:看我如何简化您的setTimeout回调,由刚好路过notification.close方法本身,与其说这是在匿名函数。更干净。

+0

感谢您简化我的代码,现在我得到它为什么不工作。不知道如何做de匿名功能。 – 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