2017-12-04 5 views
0

私は学校のスケジュールのJavaScriptアラームを作成しようとしています。そのCodePenタブではアラームは完全に機能しますが、別のタブ(まだそのウィンドウ内にある)にいるときは実行されません。コードコードはhereです。これはJavaScriptでdateオブジェクトを使用します。可変の日は異なるスケジュールのためです - 私たちは特定の日に省略されたスケジュールを持っており、それに対処するためにアラームが設定されています。アクティブなタブにないときにJavaScriptアラームが機能しないのはなぜですか?

var day; 
    function choose(choice){ 
    day=choice; 
    } 
function startTime() { 
    var today = new Date(); 
    var h = today.getHours(); 
    var m = today.getMinutes(); 
    var s = today.getSeconds(); 
    m = checkTime(m); 
    s = checkTime(s); 
    document.getElementById('txt').innerHTML = 
    h + ":" + m + ":" + s; 
    var t = setTimeout(startTime, 500); 
} 
function checkTime(i) { 
    if (i < 10) {i = "0" + i}; // add zero in front of numbers < 10 
    return i; 
} 
    var x=1; 


window.setInterval(function(){ // Set interval for checking 
    var date = new Date(); // Create a Date object to find out what time it is 
if(day==1){ 
    document.body.style.background ="black"; 
    document.getElementById("number2").style.display="none"; 
    document.getElementById("number1").style.display="block"; 
if(date.getHours()===8 && date.getMinutes 
()===16&&date.getSeconds()==0){ 
window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

} 
    if(date.getHours()===9 && date.getMinutes 
()===10&&date.getSeconds()==0){ 
window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

} 
    if(date.getHours()===10 && date.getMinutes 
()===04&&date.getSeconds()==18){ 
window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

} 
    if(date.getHours()===11 && date.getMinutes 
()===36&&date.getSeconds()==0){ 
window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

} 
    if(date.getHours()===12 && date.getMinutes 
()===42&&date.getSeconds()==0){ 
    window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

} 
    if(date.getHours()===1 && date.getMinutes 
()===24&&date.getSeconds()==0){ 
window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

} 
    if(date.getHours()===2 && date.getMinutes 
()===18&&date.getSeconds()==0){ 
    window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

}} 
    else if(day==0){ 
    document.getElementById("number1").style.display="none"; 
    document.getElementById("number2").style.display="block"; 
    document.body.style.background ="white"; 
    if(date.getHours()===8 && date.getMinutes 
()===9&&date.getSeconds()==0){ 
    window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

} 
    if(date.getHours()===8 && date.getMinutes 
()===56&&date.getSeconds()==0){ 
    window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

} 
    if(date.getHours()===9 && date.getMinutes 
()===45&&date.getSeconds()==0){ 
    window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

} 
    if(date.getHours()===10 && date.getMinutes 
()===17&&date.getSeconds()==0){ 
window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

} 
    if(date.getHours()===11 && date.getMinutes 
()===08&&date.getSeconds()==0){ 
    window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

} 
    if(date.getHours()===11 && date.getMinutes 
()===59&&date.getSeconds()==0){ 
window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 
} 
    if(date.getHours()===12 && date.getMinutes 
()===46&&date.getSeconds()==0){ 
    window.open("https://www.youtube.com/watch?v=iNpXCzaWW1s"); 

} 
+0

掲載されたコードが不完全です。実装されているように、タイマーがスケジュールどおりに正確に停止しない場合は、特定の時間が間に合わなくなり、そのようなタイマーは間違いなく正確であることが保証されます。ブラウザは、アクティブでないタブのインターバルタイマーを途中で遅くします。 – Pointy

+0

「別のタブにいるとき」とはどういう意味ですか?これは同じブラウザのタブですが、表示されたページの別のタブ表示(div)ですか? – JohnH

+0

['setInterval'はアクティブなタブにないときに1000msに抑制されます(https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Reasons_for_delays_longer_than_specified)。とにかく1秒以上の精度を使用しているように見えますが、それは問題ではないかもしれません。私の推測では、あなたのブラウザは非フォーカスページに 'window.open'を使用することを許可していません。 'window.open'の代わりに何か警告すると動作しますか? – apsillers

答えて

関連する問題