Çapraz tarayıcıda çevrimiçi / çevrimdışı olay nasıl tespit edilir?


111

HTML5 çevrimiçi ve çevrimdışı etkinliklerini kullanarak tarayıcının ne zaman çevrimdışı olduğunu doğru bir şekilde tespit etmeye çalışıyorum.

İşte kodum:

<script>
    // FIREFOX
    $(window).bind("online", applicationBackOnline); 
    $(window).bind("offline", applicationOffline);

    //IE
    window.onload = function() {
        document.body.ononline = IeConnectionEvent;
        document.body.onoffline = IeConnectionEvent;
    } 
</script>

Firefox veya IE'de "Çevrimdışı çalış" a tıkladığımda iyi çalışıyor, ancak kabloyu gerçekten çıkardığımda biraz rastgele çalışıyor.

Bu değişikliği tespit etmenin en iyi yolu nedir? Zaman aşımları olan ajax çağrılarını tekrarlamaktan kaçınmak istiyorum.


2
Trefex'e katılıyorum, ancak bağlantı algılama desteğinin çoğu uygulama için en iyi ihtimalle kalitesiz olduğunu da eklemek isterim: sırf kablonun çıkarılmış olması hemen bir bağlantı kaybı oluşturmaz. Bağlantının açık olup olmadığını fiziksel olarak test etmeyen bir yönteme güvenmek, doğru sonuçları garanti edemez.
mattbasta

Tavsiyen için teşekkürler. Yani Ajax yöntemini önerirsiniz? yani. zaman aşımıyla XHR çağrıları göndermeye devam ediyor musunuz?
Pierre Duplouy

Firefox'un (ve IE'nin ve Opera'nın) uygulaması yanlış. Bu etkiyle ilgili
yorumuma

4
Yalnızca bu amaç için oluşturulmuş açık kaynaklı bir kitaplık olan Offline.js'ye göz atmak isteyebilirsiniz .
Adam

Yanıtlar:


70

Tarayıcı satıcıları, çevrimdışı tanımlamanın nasıl yapılacağı konusunda anlaşamazlar. Bazı tarayıcılarda, yine internet erişiminden farklı olan ağ erişimi eksikliğinden ayrı olarak değerlendirdikleri bir Çevrimdışı Çalış özelliği vardır. Her şey bir karmaşa. Bazı tarayıcı satıcıları, gerçek ağ erişimi kaybolduğunda navigator.onLine bayrağını güncellerken, diğerleri yapmaz.

Spesifikasyondan:

Kullanıcı aracısı kesinlikle çevrimdışıysa (ağ bağlantısı kesilmişse) yanlış döndürür. Kullanıcı aracısı çevrimiçi olabilirse doğru döndürür.

Çevrimiçi ve çevrimdışı etkinlikler, bu özelliğin değeri değiştiğinde tetiklenir.

Navigator.onLine özniteliği, kullanıcı bağlantıları takip ettiğinde veya bir komut dosyası uzak bir sayfa istediğinde (veya böyle bir girişimin başarısız olacağını bildiğinde) kullanıcı aracısı ağla iletişim kurmazsa yanlış döndürmeli ve aksi takdirde true döndürmelidir.

Son olarak, teknik özellik notları:

Bu özellik doğası gereği güvenilmezdir. Bir bilgisayar, İnternet erişimi olmadan bir ağa bağlanabilir.


23
Yalnızca Chrome, bağlantı kesildiğinde navigator.onLine'ı doğru şekilde ayarlar. İnternet bağlantısını kaldırırsanız hem Safari hem de Firefox bayrağı asla yanlış olarak ayarlamaz.
chovy

2
@chovy ve peki ya şimdi? Son zamanlarda Firefox / Chrome'da test ettim ve beklenen sonuçları aldım, bayrağın ayarlandığını görünce, internet bağlantısını kapatıp açtığımda ..
James Cazzetta

12
Bugün 31.01.2017 OSX Chrome 55.0.2883.95, Safari 10.0.3 ve FF 50.1.0'ı açtım. Ağımda kaldığımda tüm window.navigator.onLine harika çalışıyor gibi görünüyor, ancak kabloyu yönlendiricimden çıkardım. Hepsi çevrimdışı olarak doğru bir şekilde tespit edildi.
nycynik

3
navigator.onLine tüm büyük tarayıcılarda desteklenmektedir (ve bir süredir desteklenmektedir): caniuse.com/#feat=online-status
Rafael Lüder

@ RafaelLüder Bugün itibariyle doğrudur, ancak bu cevap Ocak 2011'de yazılmıştır!
Rebecca

34

Başlıca tarayıcı satıcıları, "çevrimdışı" nın ne anlama geldiği konusunda farklılık gösterir.

Chrome ve Safari, "çevrimdışına" geçtiğinizde otomatik olarak algılayacaktır, yani "çevrimiçi" etkinlikler ve özellikler, ağ kablonuzu çıkardığınızda otomatik olarak tetiklenecektir.

Firefox (Mozilla), Opera ve IE farklı bir yaklaşım benimser ve tarayıcıda açık bir şekilde "Çevrimdışı Mod" u seçmediğiniz sürece - çalışan bir ağ bağlantınız olmasa bile sizi "çevrimiçi" olarak kabul eder.

Bu hata raporunun yorumlarında özetlenen Firefox / Mozilla davranışı için geçerli argümanlar vardır:

https://bugzilla.mozilla.org/show_bug.cgi?id=654579

Ancak soruyu yanıtlamak için - gerçekten ağ bağlantısı olup olmadığını tespit etmek için çevrimiçi / çevrimdışı olaylara / özelliğe güvenemezsiniz.

Bunun yerine, alternatif yaklaşımlar kullanmalısınız.

Bu Mozilla Geliştirici makalesinin "Notlar" bölümü, iki alternatif yönteme bağlantı sağlar:

https://developer.mozilla.org/en/Online_and_offline_events

"API tarayıcıda uygulanmamışsa, çevrimdışı olup olmadığınızı tespit etmek için AppCache hata olaylarını ve XMLHttpRequest'ten gelen yanıtları dinlemek dahil olmak üzere diğer sinyalleri kullanabilirsiniz"

Bu, "AppCache hata olaylarını dinleme" yaklaşımının bir örneğine bağlanır:

http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-appcache

... ve "XMLHttpRequest hatalarını dinleme" yaklaşımına bir örnek:

http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-xml-http-request

HTH, - Çad


1
Firefox 41 ile başlayarak: updates this property when the OS reports a change in network connectivity on Windows, Linux, and OS X.(bahsettiğiniz dokümanlara göre). Yani "Çevrimdışı mod" tarayıcısıyla göz atıyorsanız, sadece çevrimdışı değil
dostum

17

Bugün bu işi yapan açık kaynaklı bir JavaScript kitaplığı var: buna denir Offline.js.

Kullanıcılarınıza çevrimiçi / çevrimdışı göstergeyi otomatik olarak görüntüleyin.

https://github.com/HubSpot/offline

BENİOKU'nun tamamını kontrol ettiğinizden emin olun . Bağlanabileceğiniz olayları içerir.

İşte bir test sayfası . Çok güzel / bu arada güzel bir geri bildirim arayüzüne sahip! :)

Offline.js Simulate UI, gerçek bağlantınızı devre dışı bırakmak için kaba kuvvet yöntemlerini kullanmak zorunda kalmadan sayfalarınızın farklı bağlantı durumlarına nasıl yanıt verdiğini test etmenize olanak tanıyan bir Offline.js eklentisidir.


2
Kütüphane aslında yerel favicon'u kaputun altına tekrar tekrar getirerek çalışır. Bana göre kütüphane çok "büyük" ve çok fazla özelliğe sahip; ana numara sadece favicon'u tekrar tekrar getirmektir.
Karel Bílek

1
Ben ağ kablosu prizden çevrimdışı algılamaz
Poshest

15

Şu anda tüm Büyük Tarayıcılarda çalışan en iyi yol aşağıdaki Komut Dosyasıdır:

(function () {
    var displayOnlineStatus = document.getElementById("online-status"),
        isOnline = function () {
            displayOnlineStatus.innerHTML = "Online";
            displayOnlineStatus.className = "online";
        },
        isOffline = function () {
            displayOnlineStatus.innerHTML = "Offline";
            displayOnlineStatus.className = "offline";
        };

    if (window.addEventListener) {
        /*
            Works well in Firefox and Opera with the 
            Work Offline option in the File menu.
            Pulling the ethernet cable doesn't seem to trigger it.
            Later Google Chrome and Safari seem to trigger it well
        */
        window.addEventListener("online", isOnline, false);
        window.addEventListener("offline", isOffline, false);
    }
    else {
        /*
            Works in IE with the Work Offline option in the 
            File menu and pulling the ethernet cable
        */
        document.body.ononline = isOnline;
        document.body.onoffline = isOffline;
    }
})();

Kaynak: http://robertnyman.com/html5/offline/online-offline-events.html


3
Koddaki yorumların açıkça belirttiği gibi - ethernet kablosunu çıkarırsanız veya wifi'yi kapatırsanız Firefox / Chrome'da çalışmaz.
Manish

"Kaynak" bağlantısını ve bağlantısı kesilen ethernet kablosunu ziyaret etmeyi denedim, IE'de "Çevrimdışısınız" mesajını gösterdi, ancak benim için Firefox / Chrome'da görünmüyor (tüm tarayıcıların en son sürümünü kullanarak). Bir şey eksik olabilir mi?
Manish

13

Yakın zamandan beri navigator.onLine, tüm büyük tarayıcılarda aynı şeyi gösteriyor ve bu nedenle kullanılabilir.

if (navigator.onLine) {
  // do things that need connection
} else {
  // do things that don't need connection
}

Bunu doğru şekilde destekleyen en eski sürümler şunlardır: Firefox 41 , IE 9, Chrome 14 ve Safari 5.

Şu anda bu, neredeyse tüm kullanıcı yelpazesini temsil edecek, ancak sayfanızın kullanıcılarının neler yapabileceğini her zaman kontrol etmelisiniz.

FF 41'den önce, yalnızca falsekullanıcı tarayıcıyı manuel olarak çevrimdışı moda getirdiğinde gösteriliyordu. IE 8'de mülk body, yerine window.

kaynak: caniuse


11

window.navigator.onLineNitelik ve ilişkili olaylar, belirli web tarayıcılarının (şu anda güvenilmez özellikle Firefox masaüstü Ben periyodik ağ bağlantı durumunu kontrol edebilir ve uygun düzgün yükseltmek olduğunu (jQuery kullanarak) biraz fonksiyon yazdım, böylece @Junto söylediği gibi) offlineve onlineolay:

// Global variable somewhere in your app to replicate the 
// window.navigator.onLine variable (it is not modifiable). It prevents
// the offline and online events to be triggered if the network
// connectivity is not changed
var IS_ONLINE = true;

function checkNetwork() {
  $.ajax({
    // Empty file in the root of your public vhost
    url: '/networkcheck.txt',
    // We don't need to fetch the content (I think this can lower
    // the server's resources needed to send the HTTP response a bit)
    type: 'HEAD',
    cache: false, // Needed for HEAD HTTP requests
    timeout: 2000, // 2 seconds
    success: function() {
      if (!IS_ONLINE) { // If we were offline
        IS_ONLINE = true; // We are now online
        $(window).trigger('online'); // Raise the online event
      }
    },
    error: function(jqXHR) {
      if (jqXHR.status == 0 && IS_ONLINE) {
        // We were online and there is no more network connection
        IS_ONLINE = false; // We are now offline
        $(window).trigger('offline'); // Raise the offline event
      } else if (jqXHR.status != 0 && !IS_ONLINE) {
        // All other errors (404, 500, etc) means that the server responded,
        // which means that there are network connectivity
        IS_ONLINE = true; // We are now online
        $(window).trigger('online'); // Raise the online event
      }
    }
  });
}

Bunu şu şekilde kullanabilirsiniz:

// Hack to use the checkNetwork() function only on Firefox 
// (http://stackoverflow.com/questions/5698810/detect-firefox-browser-with-jquery/9238538#9238538)
// (But it may be too restrictive regarding other browser
// who does not properly support online / offline events)
if (!(window.mozInnerScreenX == null)) {
    window.setInterval(checkNetwork, 30000); // Check the network every 30 seconds
}

Çevrimdışı ve çevrimiçi olayları dinlemek için (jQuery yardımıyla):

$(window).bind('online offline', function(e) {
  if (!IS_ONLINE || !window.navigator.onLine) {
    alert('We have a situation here');
  } else {
    alert('Battlestation connected');
  }
});

7

navigator.onLine bir karmaşa

Sunucuya bir ajax araması yapmaya çalışırken bununla karşılaşıyorum.

İstemci çevrimdışıyken birkaç olası durum vardır:

  • ajax çağrısı zaman aşımına uğradı ve hata alıyorsunuz
  • ajax çağrısı başarı döndürüyor, ancak mesaj boş
  • ajax çağrısı, tarayıcı karar verdiği için yürütülmez (bu, navigator.onLine bir süre sonra yanlış hale geldiğinde olabilir)

Kullandığım çözüm, durumu javascript ile kendim kontrol etmektir. Başarılı bir aramanın koşulunu belirledim, diğer durumlarda istemcinin çevrimdışı olduğunu varsayıyorum. Bunun gibi bir şey:

var offline;
pendingItems.push(item);//add another item for processing
updatePendingInterval = setInterval("tryUpdatePending()",30000);
tryUpdatePending();

    function tryUpdatePending() {

        offline = setTimeout("$('#offline').show()", 10000);
        $.ajax({ data: JSON.stringify({ items: pendingItems }), url: "WebMethods.aspx/UpdatePendingItems", type: "POST", dataType: "json", contentType: "application/json; charset=utf-8",
          success: function (msg) {
            if ((!msg) || msg.d != "ok")
              return;
            pending = new Array(); //empty the pending array
            $('#offline').hide();
            clearTimeout(offline);
            clearInterval(updatePendingInterval);
          }
        });
      }

5

HTML5'te navigator.onLineözelliği kullanabilirsiniz . Buraya bak:

http://www.w3.org/TR/offline-webapps/#related

Muhtemelen şu anki davranışınız rastgeledir, çünkü javascript yalnızca "tarayıcı" değişkenini hazırlar ve sonra çevrimdışı ve çevrimiçi olup olmadığınızı anlar, ancak aslında Ağ Bağlantısını kontrol etmez.

Aradığınız buysa bize bildirin.

Saygılarımla,


Yardımın için teşekkürler Trefex. Kodumu değiştirdim ve şimdi yalnızca navigator.onLine özelliğini kontrol ettim, ancak öncekiyle aynı davranışı alıyorum. Lütfen mattbasta'nın yorumuna bir göz atın.
Pierre Duplouy

Merhaba Pedro, mattbasta'ya katılıyorum ama sizin için işe yarayacağını umdum :) Kesinlikle Ajax yöntemini her zaman açık olduğunu bildiğiniz bazı URL'leri sorgulamak için kullanırdım ve sonra bir bağlantının kopup kaybolmadığını bilirsiniz. Diğer bir not ise, neden çevrimiçi / çevrimdışı durumun doğru bir şekilde tespit edilmesine ihtiyaç duyuyorsunuz? Belki daha fazlasını bilseydik, sorununuz için başka bir çözüm olabilirdi. Bize bildirin,
Trefex

1
Tamam, teşekkürler :) Yalnızca uygulamanın bağlantıdaki bir değişikliği otomatik olarak algılayabilmesi için daha iyi olacağını düşündüm (FF veya IE'de çevrimdışı modu manuel olarak etkinleştirmeye gerek yok). Bu şekilde, uygulama çevrimdışı olduğunda, sunucuyu sorgulamak yerine yerel önbelleğini kullanacaktır. Bu gönderiyi
Pierre Duplouy

Bu blog yazısı için teşekkürler. Derinlemesine analiz ve konuya güven. Sanırım elde etmek istediğiniz şey, bir sunucuyu (belki de kendi sunucunuzu) sorgulayıp x sayıda zaman aşımı olduğunda yerel önbelleğe geçmeniz en iyisidir. Ne düşünüyorsun ?
Trefex

Evet, teknolojinin mevcut durumu göz önüne alındığında, en iyi seçenek bu sanırım. Umarım tüm tarayıcılar gerçek bağlantı kaybını kendi kendilerine tespit edebilir: navigator.onLine'ı kullanmak oldukça basittir ve bu daha karmaşık olmamalıdır. Değil mi?
Pierre Duplouy

3

Lütfen Çevrimdışı için yazdığım require.js modülünü bulun.

define(['offline'], function (Offline) {
    //Tested with Chrome and IE11 Latest Versions as of 20140412
    //Offline.js - http://github.hubspot.com/offline/ 
    //Offline.js is a library to automatically alert your users 
    //when they've lost internet connectivity, like Gmail.
    //It captures AJAX requests which were made while the connection 
    //was down, and remakes them when it's back up, so your app 
    //reacts perfectly.

    //It has a number of beautiful themes and requires no configuration.
    //Object that will be exposed to the outside world. (Revealing Module Pattern)

    var OfflineDetector = {};

    //Flag indicating current network status.
    var isOffline = false;

    //Configuration Options for Offline.js
    Offline.options = {
        checks: {
            xhr: {
                //By default Offline.js queries favicon.ico.
                //Change this to hit a service that simply returns a 204.
                url: 'favicon.ico'
            }
        },

        checkOnLoad: true,
        interceptRequests: true,
        reconnect: true,
        requests: true,
        game: false
    };

    //Offline.js raises the 'up' event when it is able to reach
    //the server indicating that connection is up.
    Offline.on('up', function () {
        isOffline = false;
    });

    //Offline.js raises the 'down' event when it is unable to reach
    //the server indicating that connection is down.
    Offline.on('down', function () {
        isOffline = true;
    });

    //Expose Offline.js instance for outside world!
    OfflineDetector.Offline = Offline;

    //OfflineDetector.isOffline() method returns the current status.
    OfflineDetector.isOffline = function () {
        return isOffline;
    };

    //start() method contains functionality to repeatedly
    //invoke check() method of Offline.js.
    //This repeated call helps in detecting the status.
    OfflineDetector.start = function () {
        var checkOfflineStatus = function () {
            Offline.check();
        };
        setInterval(checkOfflineStatus, 3000);
    };

    //Start OfflineDetector
    OfflineDetector.start();
    return OfflineDetector;
});

Lütfen bu blog yazısını okuyun ve düşüncelerinizi bana bildirin. http://zen-and-art-of-programming.blogspot.com/2014/04/html-5-offline-application-development.html İstemcinin çevrimdışı olduğunu algılamak için offline.js kullanan bir kod örneği içerir.


3
Not o bağlantı sadece cevaplar tavsiye edilmez, SO cevaplar çözüm (vs. henüz zamanla bayat almak eğilimindedir referanslar, başka mola) için bir aramanın son nokta olmalıdır. Lütfen bağlantıyı referans olarak koruyarak buraya bağımsız bir özet eklemeyi düşünün.
kleopatra

Merhaba, need.js modülünü bağlantı referansı ile birlikte gönderdim. Önerin için teşekkürler.
Srihari Sridharan

2

Çevrimdışı tarayıcılar arası yolu aşağıdaki gibi kolayca tespit edebilirsiniz

var randomValue = Math.floor((1 + Math.random()) * 0x10000)

$.ajax({
      type: "HEAD",
      url: "http://yoururl.com?rand=" + randomValue,
      contentType: "application/json",
      error: function(response) { return response.status == 0; },
      success: function() { return true; }
   });

yoururl.com'u ile değiştirebilirsiniz document.location.pathname.

Çözümün püf noktası, eğer bağlanamıyorsanız, alan adınıza bağlanmayı deneyin - çevrimdışısınız. tarayıcılar arası çalışır.


alan adından sonra url adı olmadığı için 404 alma değişikliği olmaz
harishr

Bazen hayır, API'min ana
Ben Aubin

API'nin ana sayfasının önemi nedir? anlamadım. çünkü sunucuya ulaştığında, url yoktur - bu nedenle, ana sayfanız 404 olsa bile işleme yoktur - önemli değildir. Belki de belirttiğiniz sorunu anlamaya çalışabileceğim bir örnek kod sağlayabilirseniz
harishr

Sadece API'lerim değil, birçok sitenin bir ana sayfası yok. Emin olmak için en iyi yol olduğunu, emin alınan durum kodu ve veri null olmak için kontrol edin öyle değil sadece normal, expectable hata
Ben Aubin

benim webapimin de bir ana sayfası yok, ancak yukarıdakiler hala çalışıyor. bu yüzden kafam karıştı. çalıştığı göz önüne alındığında, ana sayfanın önemi nedir
harishr

2

Html5 uygulamamın çevrimiçi mi yoksa çevrimdışı mı olduğunu kontrol etmek için HTML5 önbellek bildiriminde FALLBACK seçeneğini kullanıyorum:

FALLBACK:
/online.txt /offline.txt

Html sayfasında, çevrimiçi / çevrimdışı txt dosyasının içeriğini okumak için javascript kullanıyorum:

<script>$.get( "urlto/online.txt", function( data ) {
$( ".result" ).html( data );
alert( data );
});</script>

Çevrimdışıyken komut dosyası offline.txt'nin içeriğini okuyacaktır. Dosyalardaki metne bağlı olarak, web sayfasının çevrim içi mi yoksa çevrim dışı mı olduğunu tespit edebilirsiniz.


0

İşte benim çözümüm.

IE, Opera, Chrome, FireFox, Safari ile IOS 8'de Phonegap WebApp olarak ve Android 4.4.2'de Phonegap WebApp olarak test edilmiştir

Bu çözüm localhost'ta FireFox ile çalışmıyor.

================================================== ===============================

onlineCheck.js (dosya yolu: "root / js / onlineCheck.js):

var isApp = false;

function onLoad() {
        document.addEventListener("deviceready", onDeviceReady, false);
}

function onDeviceReady() {
    isApp = true;
    }


function isOnlineTest() {
    alert(checkOnline());
}

function isBrowserOnline(no,yes){
    //Didnt work local
    //Need "firefox.php" in root dictionary
    var xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHttp');
    xhr.onload = function(){
        if(yes instanceof Function){
            yes();
        }
    }
    xhr.onerror = function(){
        if(no instanceof Function){
            no();
        }
    }
    xhr.open("GET","checkOnline.php",true);
    xhr.send();
}

function checkOnline(){

    if(isApp)
    {
        var xhr = new XMLHttpRequest();
        var file = "http://dexheimer.cc/apps/kartei/neu/dot.png";

        try {
            xhr.open('HEAD', file , false); 
            xhr.send(null);

            if (xhr.status >= 200 && xhr.status < 304) {
                return true;
            } else {
                return false;
            }
        } catch (e) 
        {
            return false;
        }
    }else
    {
        var tmpIsOnline = false;

        tmpIsOnline = navigator.onLine;

        if(tmpIsOnline || tmpIsOnline == "undefined")
        {
            try{
                //Didnt work local
                //Need "firefox.php" in root dictionary
                var xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHttp');
                xhr.onload = function(){
                    tmpIsOnline = true;
                }
                xhr.onerror = function(){
                    tmpIsOnline = false;
                }
                xhr.open("GET","checkOnline.php",false);
                xhr.send();
            }catch (e){
                tmpIsOnline = false;
            }
        }
        return tmpIsOnline;

    }
}

================================================== ===============================

index.html (filepath: "root / index.html"):

<!DOCTYPE html>
<html>


<head>
    ...

    <script type="text/javascript" src="js/onlineCheck.js" ></script>

    ...

</head>

...

<body onload="onLoad()">

...

    <div onclick="isOnlineTest()">  
        Online?
    </div>
...
</body>

</html>

================================================== ===============================

checkOnline.php (dosya yolu: "kök"):

<?php echo 'true'; ?> 


0

Belge Gövdesini Kullanma:

<body ononline="onlineConditions()" onoffline="offlineConditions()">(...)</body>

Javascript Olayını Kullanma:

window.addEventListener('load', function() {

  function updateOnlineStatus() {

    var condition = navigator.onLine ? "online" : "offline";
    if( condition == 'online' ){
        console.log( 'condition: online')
    }else{
        console.log( 'condition: offline')
    }

  }

  window.addEventListener('online',  updateOnlineStatus );
  window.addEventListener('offline', updateOnlineStatus );

});

Referans :
Belge Gövdesi: çevrimiçi Etkinlik
Javascript Etkinliği: Çevrimiçi ve çevrimdışı etkinlikler

Ek Düşünceler:
"Ağ bağlantısı internet bağlantısı ile aynı değildir" etrafında dolaşmak için Yukarıdaki yöntemlerden problem: Uygulama başlangıcında ajax ile internet bağlantısını bir kez kontrol edebilir ve bir çevrimiçi / çevrimdışı mod yapılandırabilirsiniz. Kullanıcının çevrimiçi olması için bir yeniden bağlan düğmesi oluşturun. Ve başarısız olan her ajax isteğine, kullanıcıyı çevrimdışı moda geri döndüren bir işlev ekleyin.


1
Bu işe yaramaz: window.addEventListener('online', updateOnlineStatus(event) );çünkü hemen updateOnlineStatus () işlevini çağırıyorsunuz. O olmalıwindow.addEventListener('online', updateOnlineStatus );
Sébastien Rosset
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.