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");
}
掲載されたコードが不完全です。実装されているように、タイマーがスケジュールどおりに正確に停止しない場合は、特定の時間が間に合わなくなり、そのようなタイマーは間違いなく正確であることが保証されます。ブラウザは、アクティブでないタブのインターバルタイマーを途中で遅くします。 – Pointy
「別のタブにいるとき」とはどういう意味ですか?これは同じブラウザのタブですが、表示されたページの別のタブ表示(div)ですか? – JohnH
['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