2011-03-01 16 views
9

मैं कैसे जान सकता हूं, ज़ुल में, यदि नेटवर्क (डी) जुड़ा हुआ है?कैसे पता चलेगा कि नेटवर्क (डी) कनेक्ट है या नहीं?

--update

का उपयोग करना:

function observe(aSubject, aTopic, aState) { 
     if (aTopic == "network:offline-status-changed") { 
      write("STATUS CHANGED!"); 
     } 
    } 
    var os = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService); 
    os.addObserver(observe, "network:offline-status-changed", false); 

और प्राथमिकता:

pref("network.manage-offline-status", true); 

यह काम नहीं कर रहा .. वहाँ एक bug report here है, लेकिन मुझे नहीं लगता कि यह है है इसके साथ कुछ करने के लिए।

-

असल मुझे लगता है कि, अधिसूचित किया जाना के रूप में फ़ायरफ़ॉक्स में भी हम कभी नहीं सूचित किया जाता है संभव नहीं है, और उपयोगकर्ता को चिह्नित करने के लिए "ऑफलाइन काम करें" अगर वह पता करने के लिए ब्राउज़र चाहता है की जरूरत है यह ऑफ़लाइन है कि ..

-

स्क्रीनशॉट फ़ायरफ़ॉक्स "about: config" के अपने "ऑफ़लाइन" स्ट्रिंग, दुर्भाग्य से, वहाँ कोई "network.manage-ऑफ़लाइन-स्थिति" के लिए फ़िल्टरिंग:

enter image description here

+0

क्या आपने नेटवर्क मैनेजर का उपयोग करने के लिए वरीयताओं को कॉन्फ़िगर करने का प्रयास किया है, और यह देखकर कि फ़ायरफ़ॉक्स स्वचालित रूप से ऑफलाइन हो जाता है या नहीं? – Neil

+0

@Neil ऐसा लगता है कि ऐसी कोई संपत्ति नहीं है, लेकिन मैं मौजूदा "ऑफ़लाइन" गुणों के साथ व्यवहार की जांच करूंगा .. (मेरा स्क्रीनशॉट देखें) –

+0

दरअसल वरीयता का नाम हाल ही में बदल गया है, लेकिन किसी भी तरह से इसे सही करने के लिए डिफ़ॉल्ट होना चाहिए । मैंने तब से nsIIOService2 पर प्रबंधनऑफलाइनस्टैटस प्रॉपर्टी देखी है जिसे आप चेक भी कर सकते हैं। – Neil

उत्तर

2

सबसे अच्छा तरीका मैंने पाया निम्नलिखित जावास्क्रिप्ट कोड, कि एक ping तरह बर्ताव करता है उपयोग करने के लिए, और कुछ बड़े वेबसाइटों के साथ परीक्षण कर रहा है , और मान लें कि यदि उनमें से कोई भी जवाब नहीं देता है, तो नेटवर्क को डिस्कनेक्ट होना चाहिए।

var ping = {}; 
ping = { 
    img:null, 
    imgPreload:null, 
    timer:null, 
    init:function() { 
     var sess = new Date(); 
     var nocache = sess.getTime(); 
     var imguri = ping.img+"?time="+nocache; 
     var ping.imgPreload = new Image(); 
     ping.imgPreload.onload = function() { 
      clearTimeout(ping.timer); 
      ping.timer = null; 
      alert("Domain is available"); 
     }; 
     ping.imgPreload.src = imguri; 
     ping.timer = setTimeout("ping.fail_to_ping()",60000); 
    }, 
    fail_to_ping:function() { 
     clearTimeout(ping.timer); 
     ping.timer = null; 
     ping.imgPreload = null; 
     alert("Ping to domain failed!"); 
    } 
}; 

(http://crynobone.com/ci/index.php/archive/view/852 से)

--update

लेकिन, के रूप में यह एक विश्वसनीय समाधान नहीं है (जैसा कि आप भरोसा नहीं कर सकते कि छवि वेबसाइट में हमेशा के लिए होगा), एक नया XPCom घटक विकसित करने का सबसे अच्छा समाधान हो सकता है।

+0

ठीक है, यह केवल छवि यूआरएल के लिए काम करेगा, मुझे एचटीएमएल पेज के लिए ऐसा कुछ चाहिए .. –

+0

@ टॉम: ठीक है यह समाधान वास्तव में काफी साफ है। छवि चीज सिर्फ यह जांचने के लिए है कि कनेक्शन वहां है या नहीं। उसके बाद आप अपना एचटीएमएल पेज लोड कर सकते हैं, क्योंकि आपने कनेक्शन की पुष्टि की है। – Tokimon

+0

@ टोकिमॉन यह एक विश्वसनीय समाधान नहीं है, मैं हमेशा वेब पर किसी भी छवि पर भरोसा नहीं कर सकता। –

5

आपको नेविगेटर.ऑनलाइन का उपयोग करने में सक्षम होना चाहिए। यहाँ मदद पृष्ठ

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

है navigator.onLine एक संपत्ति है कि एक सही/गलत मूल्य का कहना है (ऑनलाइन के लिए सच है, ऑफ़लाइन के लिए गलत) है। यह संपत्ति अद्यतन होती है जब भी उपयोगकर्ता द्वारा "ऑफ़लाइन मोड" में स्विच करता है संबंधित मेनू आइटम (फ़ाइल -> फ़ायरफ़ॉक्स में ऑफ़लाइन कार्य) का चयन करना।

एक अन्य समाधान (के रूप में @Neil द्वारा टिप्पणी की):

Components.classes["@mozilla.org/observer-service;1"] 
    .getService(Components.interfaces.nsIObserverService) 
    .addObserver(myF­unction, "network:offline-status-changed", false); 
+2

यह आपको नहीं बताएगा कि क्या कोई नेटवर्क कॉर्ड यंक करता है, है ना? – corsiKa

+0

आप जानते हैं कि मैं इसके बारे में सोच रहा था क्योंकि यहां तक ​​कि मेरे एप्लिकेशन हमेशा यह नहीं जानते कि नेटवर्क केबल को टाइमआउट होने तक यंक किया गया था या कोई मान्य आईपी पता नहीं है। मुझे डर है कि मेरे पास आपके लिए बेहतर जवाब नहीं है :( –

+0

आज के वोटों के साथ क्या है? :( –

0

एएच ... एचटीएमएल 5 के अनुसार (echmascript 5 पढ़ें), on-/offline घटनाएं उपलब्ध हैं।

Mozilla Hacks

संपादित 20/4/2011 पर यहाँ यह देखें:
मैं सिर्फ इस उत्तर के लिए एक अद्यतन का सामना करना पड़ा, जब मैं एमएस MIX11 से एक पॉडकास्ट देख रहा था:
http://channel9.msdn.com/Events/MIX/MIX11/HTM14 समय 43:36 के आसपास, व्याख्याता वास्तव में window.navigator.onLine संपत्ति के बारे में बात कर रहा है, जहां वह यह पता लगाने के लिए उपयोग करता है कि ब्राउजर (और कंप्यूटर) ऑनलाइन है या नहीं। फिर वह फिर से ऑनलाइन होने पर कुछ करने के लिए online ईवेंट का उपयोग करता है।

यह विधि केवल आधुनिक ब्राउज़रों में उपलब्ध है, हालांकि। तो आईई 8 और नीचे कनेक्शन के लिए मतदान करना है।

+0

[इस पृष्ठ] (http://help.dottoro.com/ljnasgpu.php) के अनुसार यह ईवेंट आईई 8+ और एफएफ 3+ – Tokimon

+0

में समर्थित है! अनजाने में, मोज़िला पेज पर उदाहरण हमेशा मुझे "ऑनलाइन" दिखा रहा है। यहां तक ​​कि अगर मैं भौतिक केबल अनप्लग्ड के साथ फ़ाइल खोलता हूं। –

+0

इसके अलावा, Google क्रोम के साथ html5 टैग काम नहीं करता है। यह कहता है कि आपको स्विच करने के लिए "फ़ाइल-> ऑफ़लाइन" पर क्लिक करना होगा, लेकिन ऐसा विकल्प Google क्रोम पर उपलब्ध नहीं है, और शायद यह कनेक्शन खोने को पहचान नहीं पाएगा। दुखद, एक अच्छा समाधान की तरह लग रहा था .. –

संबंधित मुद्दे