ऑनलाइन / ऑफलाइन इवेंट क्रॉस-ब्राउज़र का पता कैसे लगाएं?


111

जब एचटीएमएल 5 ऑनलाइन और ऑफलाइन घटनाओं का उपयोग करके ब्राउज़र ऑफ़लाइन हो जाता है, तो मैं सही तरीके से पता लगाने की कोशिश कर रहा हूं।

यहाँ मेरा कोड है:

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

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

यह ठीक काम करता है जब मैं फ़ायरफ़ॉक्स या IE पर "ऑफ़लाइन काम" बस हिट करता हूं, लेकिन जब मैं वास्तव में तार को अनप्लग करता हूं तो यह बेतरतीब ढंग से काम करता है।

इस बदलाव का पता लगाने का सबसे अच्छा तरीका क्या है? मैं टाइमआउट के साथ अजाक्स कॉल को दोहराने से बचना चाहता हूं।


2
मैं ट्रेफेक्स के साथ सहमत हूं, लेकिन मैं यह भी जोड़ना चाहूंगा कि कनेक्शन का पता लगाने का समर्थन ज्यादातर ऐप के लिए सबसे अच्छा है: सिर्फ इसलिए कि तार अनप्लग है, तुरंत खोए हुए कनेक्शन का गठन नहीं करता है। एक विधि पर भरोसा करना जो शारीरिक रूप से परीक्षण नहीं करता है कि क्या कनेक्शन खुला है वास्तव में सटीक परिणाम की गारंटी नहीं दे सकता है।
मटकाबस्टा

आपके सुझाव के लिए धन्यवाद। तो आप अजाक्स विधि की सिफारिश करेंगे? अर्थात। टाइमआउट के साथ XHR कॉल भेजते रहें?
पियरे डुप्लॉय जुले

फ़ायरफ़ॉक्स (और IE और ओपेरा का) कार्यान्वयन गलत है। उस प्रभाव के लिए मेरी टिप्पणी यहां देखें: Bugzilla.mozilla.org/show_bug.cgi?id=654579#c9
thewoolleyman

4
आप इस उद्देश्य के लिए निर्मित एक ओपन-सोर्स लाइब्रेरी, ऑफ़लाइन की जाँच कर सकते हैं ।
एडम

जवाबों:


70

ब्राउज़र विक्रेता ऑफ़लाइन को परिभाषित करने के तरीके पर सहमत नहीं हो सकते हैं। कुछ ब्राउज़रों में एक कार्य ऑफ़लाइन सुविधा है, जिसे वे नेटवर्क एक्सेस की कमी के लिए अलग मानते हैं, जो फिर से इंटरनेट एक्सेस के लिए अलग है। सारी बात गड़बड़ है। कुछ ब्राउज़र विक्रेता नेवीगेटर.ऑनलाइन फ्लैग को अपडेट करते हैं जब वास्तविक नेटवर्क एक्सेस खो जाता है, तो अन्य नहीं।

कल्पना से:

यदि उपयोगकर्ता एजेंट निश्चित रूप से ऑफ़लाइन है (नेटवर्क से डिस्कनेक्ट किया गया है) तो गलत है। यदि उपयोगकर्ता एजेंट ऑनलाइन हो सकता है तो सही है।

इस विशेषता के मूल्य में परिवर्तन होने पर ऑनलाइन और ऑफलाइन घटनाओं को निकाल दिया जाता है।

नेविगेटर.ऑनलाइन विशेषता झूठी वापस आनी चाहिए यदि उपयोगकर्ता एजेंट नेटवर्क से संपर्क नहीं करेगा जब उपयोगकर्ता लिंक का अनुसरण करता है या जब कोई स्क्रिप्ट दूरस्थ पृष्ठ का अनुरोध करती है (या जानता है कि ऐसा प्रयास विफल हो जाएगा), और अन्यथा सही लौटना चाहिए।

अंत में, कल्पना नोट:

यह विशेषता स्वाभाविक रूप से अविश्वसनीय है। इंटरनेट एक्सेस के बिना कंप्यूटर को नेटवर्क से जोड़ा जा सकता है।


23
कनेक्टिविटी खो जाने पर केवल Chrome ठीक से नेविगेट करता है। यदि आप इंटरनेट कनेक्शन को हटाते हैं, तो सफारी और फ़ायरफ़ॉक्स दोनों कभी भी झंडे को सेट नहीं करते हैं।
चॉवी

2
@chovy और अब के बारे में कैसे? मैंने हाल ही में फ़ायरफ़ॉक्स / क्रोम में इसका परीक्षण किया और अपेक्षित परिणाम प्राप्त किए, यह देखते हुए कि ध्वज को सेट किया जा रहा है, जब मैं बंद होता हूं और इंटरनेट कनेक्शन पर ..
जेम्स कॉज़ेटा

12
आज 1/31/2017 को मैंने OSX Chrome 55.0.2883.95, Safari 10.0.3 और FF 50.1.0 खोला। जब मैं अपने नेटवर्क पर रहा, लेकिन window.navigator.onLine के सभी काम बहुत अच्छे लगते हैं, लेकिन मैंने अपने राउटर से कॉर्ड हटा दिया। वे सभी सही ढंग से ऑफ़लाइन पाए गए।
nycynik

3
navigator.onLine सभी प्रमुख ब्राउज़रों में समर्थित है (और कुछ समय के लिए है): caniuse.com/#feat=online-status
Rafael Lüder

@ RafaelLüder आज के अनुसार सही है, लेकिन यह जवाब जनवरी 2011 में लिखा गया था!
रेबेका

34

प्रमुख ब्राउज़र विक्रेताओं का मतलब "ऑफ़लाइन" पर भिन्न होता है।

जब आप "ऑफ़लाइन" स्वचालित रूप से जाते हैं, तो क्रोम और सफ़ारी का पता चलेगा - जिसका अर्थ है कि "ऑनलाइन" ईवेंट और प्रॉपर्टीज़ आपके नेटवर्क केबल को अनप्लग करने पर स्वचालित रूप से आग लग जाएगी।

फ़ायरफ़ॉक्स (मोज़िला), ओपेरा, और IE एक अलग दृष्टिकोण लेते हैं, और आपको "ऑनलाइन" मानते हैं जब तक कि आप ब्राउज़र में "ऑफ़लाइन मोड" स्पष्ट रूप से नहीं उठाते हैं - भले ही आपके पास कार्यशील नेटवर्क कनेक्शन न हो।

फ़ायरफ़ॉक्स / मोज़िला व्यवहार के लिए मान्य तर्क हैं, जो इस बग रिपोर्ट की टिप्पणियों में उल्लिखित हैं:

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

लेकिन, इस सवाल का जवाब देने के लिए - यदि वास्तव में नेटवर्क कनेक्टिविटी है, तो यह पता लगाने के लिए आप ऑनलाइन / ऑफ़लाइन घटनाओं / संपत्ति पर भरोसा नहीं कर सकते।

इसके बजाय, आपको वैकल्पिक तरीकों का उपयोग करना चाहिए।

इस मोज़िला डेवलपर लेख का "नोट्स" खंड दो वैकल्पिक तरीकों के लिंक प्रदान करता है:

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

"यदि एपीआई ब्राउज़र में लागू नहीं होता है, तो आप यह पता लगाने के लिए अन्य संकेतों का उपयोग कर सकते हैं कि क्या आप ऑफ़लाइन हैं जिसमें AppCache त्रुटि घटनाओं और XMLHttpRequest से प्रतिक्रियाओं को सुनना शामिल है"

यह "AppCache त्रुटि घटनाओं के लिए सुन" दृष्टिकोण के एक उदाहरण के लिए लिंक:

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

... और "XMLHttpRequest विफलताओं के लिए सुन रहा" दृष्टिकोण का एक उदाहरण:

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

एचटीएच, - चाड


1
फ़ायरफ़ॉक्स 41 के साथ शुरू: updates this property when the OS reports a change in network connectivity on Windows, Linux, and OS X.(आपके द्वारा उल्लिखित डॉक्स के अनुसार)। तो यह केवल ऑफ़लाइन यदि आप ब्राउज़र के साथ हैं ब्राउज़िंग "ऑफलाइन मोड" नहीं है
यार

17

आज एक खुला स्रोत जावास्क्रिप्ट पुस्तकालय है जो यह काम करता है: इसे कहा जाता है Offline.js

स्वचालित रूप से अपने उपयोगकर्ताओं के लिए ऑनलाइन / ऑफ़लाइन संकेत प्रदर्शित करें।

https://github.com/HubSpot/offline

पूर्ण README की जाँच अवश्य करें । इसमें ऐसी घटनाएँ शामिल हैं जिन्हें आप हुक कर सकते हैं।

यहाँ एक परीक्षण पृष्ठ है । यह सुंदर है / वैसे एक अच्छी प्रतिक्रिया यूआई है! :)

ऑफ़लाइन.जम्स सिम्यूलेट यूआई एक ऑफ़लाइन है। प्लग-इन है कि आप अपने वास्तविक कनेक्टिविटी को अक्षम करने के लिए जानवर-बल विधियों का उपयोग किए बिना अपने पृष्ठों को अलग-अलग कनेक्टिविटी राज्यों के लिए प्रतिक्रिया करने की अनुमति देता है।


2
पुस्तकालय वास्तव में हुड के नीचे बार-बार स्थानीय फ़ेविकॉन लाने के द्वारा काम करता है। मेरी राय में, पुस्तकालय बहुत "बड़ा" है और इसमें कई विशेषताएं हैं; मुख्य चाल सिर्फ बार-बार फेविकॉन लाने की है।
कारेल बिलेक

1
ऑफ़लाइन पता नहीं लगा पाया जब मैं नेटवर्क केबल अनप्लग
poshest

15

सबसे अच्छा तरीका है जो सभी प्रमुख ब्राउज़रों पर अब काम करता है निम्नलिखित स्क्रिप्ट है:

(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;
    }
})();

स्रोत: http://robertnyman.com/html5/offline/online-offline-events.html


3
जैसा कि कोड में टिप्पणियां स्पष्ट रूप से बताती हैं - यदि आप ईथरनेट केबल को अनप्लग करते हैं या वाईफाई बंद करते हैं तो यह फ़ायरफ़ॉक्स / क्रोम में काम नहीं करता है।
मनीष

मैंने "स्रोत" लिंक और डिस्कनेक्ट किए गए ईथरनेट केबल पर जाने की कोशिश की, यह आईई में "आप ऑफ़लाइन हैं" दिखाया, लेकिन मेरे लिए फ़ायरफ़ॉक्स / क्रोम में नहीं (सभी ब्राउज़रों के नवीनतम संस्करण का उपयोग करके)। हो सकता है कि मुझसे कुछ छूट रहा हो?
मनीष

13

चूंकि हाल ही में, navigator.onLineसभी प्रमुख ब्राउज़रों पर समान दिखाया गया है, और इस प्रकार यह प्रयोग करने योग्य है।

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

सबसे पुराने संस्करण जो इसे सही तरीके से समर्थन करते हैं, वे हैं: फ़ायरफ़ॉक्स 41 , आईई 9, क्रोम 14 और सफारी 5।

वर्तमान में यह उपयोगकर्ताओं के लगभग पूरे स्पेक्ट्रम का प्रतिनिधित्व करेगा, लेकिन आपको हमेशा यह देखना चाहिए कि आपके पृष्ठ के उपयोगकर्ताओं में क्या क्षमताएं हैं।

एफएफ 41 से पहले, यह केवल तभी दिखाएगा falseजब उपयोगकर्ता ब्राउज़र को ऑफ़लाइन मोड में मैन्युअल रूप से डालता है। IE 8 में body, इसके बजाय, संपत्ति थी window

स्रोत: कैनीयूज़


11

window.navigator.onLineविशेषता और उसके संबंधित घटनाओं वर्तमान में कुछ वेब ब्राउज़र (पर अविश्वसनीय हैं विशेष रूप से फ़ायरफ़ॉक्स डेस्कटॉप तो मैं एक छोटे से समारोह (jQuery का उपयोग) है कि समय-समय पर नेटवर्क कनेक्टिविटी की स्थिति की जांच और उचित बढ़ा लिखा था,) के रूप में @Junto कहा offlineऔर onlineघटना:

// 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
      }
    }
  });
}

आप इसे इस तरह से उपयोग कर सकते हैं:

// 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
}

ऑफ़लाइन और ऑनलाइन घटनाओं को सुनने के लिए (jQuery की मदद से):

$(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 एक गड़बड़ है

जब सर्वर पर अजाक्स कॉल करने की कोशिश कर रहा हूं तो मुझे इसका सामना करना पड़ा।

क्लाइंट के ऑफ़लाइन होने पर कई संभावित स्थितियाँ हैं:

  • अजाक्स कॉल टाइमआउट और आप त्रुटि प्राप्त करते हैं
  • अजाक्स कॉल सफलता देता है, लेकिन संदेश शून्य है
  • ajax कॉल को निष्पादित नहीं किया जाता है क्योंकि ब्राउज़र ऐसा तय करता है (ऐसा तब हो सकता है जब navigator.onLine थोड़ी देर बाद गलत हो जाता है)

मेरे द्वारा उपयोग किए जा रहे समाधान को जावास्क्रिप्ट के साथ स्थिति को स्वयं नियंत्रित करना है। मैंने एक सफल कॉल की स्थिति निर्धारित की, किसी भी अन्य मामले में मुझे लगता है कि ग्राहक ऑफ़लाइन है। कुछ इस तरह:

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 में आप navigator.onLineसंपत्ति का उपयोग कर सकते हैं। इधर देखो:

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

संभवतः आपका वर्तमान व्यवहार यादृच्छिक है क्योंकि जावास्क्रिप्ट केवल "ब्राउज़र" चर तैयार करता है और फिर जानता है कि क्या आप ऑफ़लाइन और ऑनलाइन हैं, लेकिन यह वास्तव में नेटवर्क कनेक्शन की जांच नहीं करता है।

यदि आप इसे ढूंढ रहे हैं तो हमें बताएं।

सधन्यवाद,


आपकी मदद के लिए धन्यवाद ट्रेफ़ेक्स। मैंने अपना कोड बदल दिया है, और अब केवल नेविगेटर.ऑनलाइन संपत्ति की जांच करता हूं, हालांकि मुझे पहले जैसा ही व्यवहार मिलता है। कृपया मैटबस्ता की टिप्पणी पर एक नज़र डालें।
पियरे डुप्लौय जूल

हाय पेड्रो, मैं मैटबस्ता से सहमत हूं, लेकिन मुझे उम्मीद थी कि यह आपके लिए काम करेगा :) मैं निश्चित रूप से अजाक्स पद्धति का उपयोग कुछ URL को क्वेरी करने के लिए करूंगा जो आपको पता है कि हमेशा ऊपर है और फिर आपको पता चलेगा कि कनेक्शन खो गया है या नहीं। एक अन्य नोट पर, आपको ऑनलाइन / ऑफ़लाइन स्थिति का सही पता लगाने की आवश्यकता क्यों है? शायद अगर हम अधिक जानते हैं, तो आपके मुद्दे का एक और समाधान होगा। आइए जानते हैं,
ट्रेफेक्स

1
ठीक है, धन्यवाद :) मुझे लगा कि यह उपयोगकर्ता के लिए बेहतर होगा यदि एप्लिकेशन कनेक्टिविटी में परिवर्तन का स्वतः पता लगाने में सक्षम था (एफएफ या आईई में ऑफ़लाइन मोड को मैन्युअल रूप से सक्षम करने की आवश्यकता नहीं है)। इस तरह, जब एप्लिकेशन ऑफ़लाइन हो जाता है, तो वह सर्वर को क्वेरी करने के बजाय अपने स्थानीय कैश का उपयोग करेगा। मुझे यह पोस्ट जॉन रेसिग से मिली, जो बहुत कुछ समझाता है कि यह काम क्यों नहीं करता है: ejohn.org/blog/offline-events
पियरे डुप्लौय

उस ब्लॉग पोस्ट के लिए धन्यवाद। गहराई से विश्लेषण और बिंदु पर अधिकार में। मुझे लगता है कि यदि आप कुछ सर्वर (शायद अपने खुद के) को क्वेरी करते हैं और तब स्थानीय कैश पर स्विच करना चाहते हैं तो यह सबसे अच्छा है। तुम क्या सोचते हो ?
ट्रेफेक्स

हाँ, मुझे लगता है कि सबसे अच्छा विकल्प है - कला की वर्तमान स्थिति को देखते हुए। मुझे आशा है कि सभी ब्राउज़र अंततः स्वयं द्वारा कनेक्शन के वास्तविक नुकसान का पता लगाने में सक्षम होंगे: navigator.onLine का उपयोग करना बहुत सरल है और यह अधिक जटिल नहीं होना चाहिए। क्या आपको नहीं लगता?
पियरे डुप्लौय जुले

3

कृपया ऑफ़लाइन के लिए लिखे गए आवश्यकता.जेएस मॉड्यूल को खोजें।

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

कृपया इस ब्लॉग पोस्ट को पढ़ें और मुझे अपने विचार बताएं। http://zen-and-art-of-programming.blogspot.com/2014/04/html-5-offline-application-development.html इसमें क्लाइंट के ऑफ़लाइन होने का पता लगाने के लिए ऑफ़लाइन.js का उपयोग करके एक कोड नमूना होता है।


3
ध्यान दें कि लिंक-केवल उत्तर हतोत्साहित किए जाते हैं, एसओ उत्तर एक समाधान के लिए खोज का अंतिम बिंदु होना चाहिए (बनाम संदर्भों का एक और ठहराव, जो समय के साथ बासी हो जाते हैं)। कृपया लिंक को संदर्भ के रूप में रखते हुए, यहां एक स्टैंड-अलोन सिनोप्सिस जोड़ने पर विचार करें।
क्लेओपेट्रा

नमस्ते, मैं लिंक संदर्भ के साथ आवश्यकता के मॉड्यूल के साथ पोस्ट किया है। सलाह के लिये धन्यवाद।
श्रीहरि श्रीधरन

2

आप नीचे की तरह आसानी से ऑफ़लाइन क्रॉस-ब्राउज़र तरीके का पता लगा सकते हैं

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 को बदल सकते हैं document.location.pathname

समाधान का क्रूस है, अपने डोमेन नाम से कनेक्ट करने का प्रयास करें, यदि आप कनेक्ट करने में सक्षम नहीं हैं - आप ऑफ़लाइन हैं। पार ब्राउज़र काम करता है।


यह देखते हुए कि डोमेन नाम के बाद कोई url नाम नहीं है, 404 पाने का कोई परिवर्तन नहीं है
harishr

कभी-कभी नहीं, जैसे मेरे आपी का मुखपृष्ठ 404 है
बेन ऑबिन

आपी का होम पेज कैसा है ?? नहीं मिला। क्योंकि जब यह सर्वर को हिट करता है, तो कोई यूआरएल नहीं है - इसलिए कोई प्रसंस्करण नहीं है, भले ही आपका होम पेज 404 हो - इससे कोई फर्क नहीं पड़ता। हो सकता है कि आप कुछ सैंपल कोड प्रदान कर सकें, जो मैं आपके द्वारा बताई गई समस्या को समझने और समझने का प्रयास कर सकता हूं
harishr

सिर्फ मेरे एपि का ही नहीं, बल्कि बहुत सारी साइटों का होम पेज नहीं है। यह सुनिश्चित करने के लिए जांच लें कि प्राप्त स्थिति कोड और डेटा शून्य है, यह सुनिश्चित करने का सबसे अच्छा तरीका है कि यह सिर्फ एक सामान्य, अपेक्षित त्रुटि नहीं है
बेन ऑबिन

मेरे वेबपी में एक होम पेज भी नहीं है, लेकिन ऊपर अभी भी काम करता है। यही कारण है कि मैं भ्रमित हूं। होम पेज कैसे मायने रखता है, यह देखते हुए कि इसका काम
harishr

2

अगर HTML5 ऐप ऑनलाइन या ऑफलाइन द्वारा:

FALLBACK:
/online.txt /offline.txt

Html पेज में मैं जावास्क्रिप्ट का उपयोग करता हूं, ऑनलाइन / ऑफलाइन txt फ़ाइल की सामग्री को पढ़ें:

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

जब ऑफ़लाइन स्क्रिप्ट ऑफ़लाइन की सामग्री को पढ़ेगी। फ़ाइलों में पाठ के आधार पर आप यह पता लगा सकते हैं कि वेबपेज ऑफ़लाइन है या नहीं।


0

यहाँ मेरा समाधान है।

आईओएस 8 पर फोनगैप वेबऐप के रूप में आईई, ओपेरा, क्रोम, फायरफॉक्स, सफारी, के साथ परीक्षण किया गया और एंड्रॉइड 4.4.2 पर फोनगैप वेबएप के रूप में।

यह समाधान फ़ायरफ़ॉक्स के साथ स्थानीयहोस्ट पर काम नहीं कर रहा है।

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

onlineCheck.js (filepath: "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 (फ़ाइलपथ: "रूट"):

<?php echo 'true'; ?> 

0

ठीक है, आप जावास्क्रिप्ट प्लगइन की कोशिश कर सकते हैं जो वास्तविक समय में ब्राउज़र कनेक्शन की निगरानी कर सकता है और उपयोगकर्ता को सूचित कर सकता है यदि इंटरनेट या इंटरनेट के साथ ब्राउज़र कनेक्शन नीचे चला गया।

वायरमॉइन जावास्क्रिप्ट प्लगइन और डेमो आप यहां पा सकते हैं

http://ryvan-js.github.io/


0

दस्तावेज़ निकाय का उपयोग करना:

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

जावास्क्रिप्ट इवेंट का उपयोग करना:

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

});

संदर्भ :
दस्तावेज़-निकाय: ऑनऑनलाइन इवेंट
जावास्क्रिप्ट-इवेंट: ऑनलाइन और ऑफलाइन इवेंट

अतिरिक्त विचार:
"नेटवर्क कनेक्शन को इंटरनेट कनेक्शन के समान नहीं है" के आसपास शिप करने के लिए उपरोक्त विधियों से समस्या: आप आवेदन शुरू होने पर ajax के साथ एक बार इंटरनेट कनेक्शन की जांच कर सकते हैं और ऑनलाइन / ऑफलाइन मोड को कॉन्फ़िगर कर सकते हैं। ऑनलाइन जाने के लिए उपयोगकर्ता के लिए एक फिर से कनेक्ट बटन बनाएँ। और प्रत्येक में विफल ajax एक फ़ंक्शन का अनुरोध करें जो उपयोगकर्ता को ऑफ़लाइन मोड में वापस किक करता है।


1
यह काम नहीं करेगा: window.addEventListener('online', updateOnlineStatus(event) );क्योंकि आप updateOnlineStatus () फ़ंक्शन को तुरंत कॉल कर रहे हैं। यह होना चाहिएwindow.addEventListener('online', updateOnlineStatus );
सेबास्टियन रॉसैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.