0

異常な問題があります。次のスクリプトを使用して、を使用してインターネット接続を確認していますnavigator.onLine。インターネットに接続している場合、ページは15秒ごとに更新されます。インターネットに接続されていない場合、ページはinnerHTMLメッセージの表示に使用されます。

<script type="text/javascript">
setInterval(function () {
if (navigator.onLine) {
var myInterval = setInterval(function(){window.location.href = "Tracker.html";},15000);
} else {
clearInterval(myInterval);
var changeMe = document.getElementById("change");
change.innerHTML = "<big><font face='Arial' color='#ffffff' size='2'><center>OFFLINE</big><br>No internet connection</font></center>";
}
}, 250);
</script>

私の問題は、インターネット接続がなくなるとメッセージが表示されますが、ページは最後にもう一度更新されるということです。clearInterval(myInterval);コードの一部で使用することでこれを回避しようとしてelseいますが、機能しません。

助言がありますか?

4

3 に答える 3

2

外側のインターバルコールバックが実行されるたびに、新しいmyInterval変数が作成され、前の変数は失われます(コールバックが終了するため、スコープ外になります)。

関数の外部で宣言することにより、関数呼び出し間で変数の値を永続化する必要があります。また、タイムアウトがすでに実行されている場合は、別のタイムアウトを作成していないことを確認する必要があります。

var timeout = null;

setInterval(function () {
    if (navigator.onLine) {
        if (timeout === null) {
            timeout = setInterval(function(){window.location.href = "Tracker.html";},15000);
        }
    } else {
        clearTimeout(timeout);
        timeout = null;
        // ...
   }
}, 250);
于 2012-12-29T19:11:57.833 に答える
2

15秒間隔でページを更新するには(接続が存在する場合)、次を使用します。

function refresh() {
    if(navigator.onLine)
        window.location.href = "Tracker.html";
    else{
        var changeMe = document.getElementById("change");
        change.innerHTML = "<big><font face='Arial' color='#ffffff' size='2'><center>OFFLINE</big><br>No internet connection</font></center>";
        setTimeout(refresh, 250);
    }
}
setTimeout(refresh, 15000);

15秒の終わりに、これは接続が存在するかどうかをチェックします。ある場合は、ページを更新します。存在しない場合は、ユーザーが再接続されるまで250ミリ秒ごとにチェックを続行し、再接続するとページが更新されます。

最終的な結果として、スクリプトは15秒以上経過した後できるだけ早くページを更新します。

これがデモンストレーションです:http://jsfiddle.net/JGEt9/show

于 2012-12-29T19:17:15.640 に答える
1

myIntervalifステートメントの外で宣言する必要があります。更新コードも1回だけ必要です。このようなもの:

var myInterval = setTimeout(function(){window.location.href = "Tracker.html";},15000);
setInterval(function () {
  if (!navigator.onLine) {
    clearTimeout(myInterval);
    var changeMe = document.getElementById("change");
    changeMe.innerHTML = "<big><font face='Arial' color='#ffffff' size='2'><center>OFFLINE</big><br>No internet connection</font></center>";
  }
}, 250);

ここでは、更新間隔を設定し、ブラウザがオフラインかどうかを継続的に確認します。オフラインの場合は、タイマーを削除してクリーンアップコードを実行します。また、更新コードを変更して、intervalではなくsetTimeoutを使用するようにしました。これは、1回だけ発生するためです。

もう1つの問題は、作成changeMeしてから使用しようとすることchangeです。change存在しません。私の例でもそれを修正しました。

注:接続が回復すると、これは更新を再開しません。フェリックス・クリングの答えを参照してください。

于 2012-12-29T19:09:27.707 に答える