2011-03-01 8 views
9

Xul에서 네트워크가 연결되어 있는지 어떻게 알 수 있습니까?네트워크가 연결되어 있는지 확인하는 방법은 무엇입니까?

--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하지만 나는 그것이 있다고 생각하지 않습니다 그것과 관련이있다.

-

사실 나는 심지어 파이어 폭스에서 우리가 통지되는 일은 없습니다로 통지 할 수는 없습니다 생각하고, 사용자가 수동으로 자신이 알고 브라우저를 원한다면 "오프라인으로 작업"을 표시해야

0 : "오프라인"문자열, 불행하게도,이 아니오 "network.manage - 오프라인 상태가"필터링 :

스크린 샷 내 "설정에 대해"파이어 폭스 -

.. 오프라인의 그

+0

네트워크 관리자를 사용하도록 환경 설정을 구성하고 Firefox가 자동으로 오프라인 상태로 전환되는지 확인해 보셨습니까? – Neil

+0

@Neil에는 그러한 속성이없는 것처럼 보이지만 기존의 "오프라인"속성으로 동작을 확인하겠습니다. (내 스크린 샷 참조) –

+0

실제로 선호도 이름이 최근에 변경되었지만 어느 것이 든 기본값이 true로 설정되어야합니다 . 이후 확인할 수있는 nsIIOService2에서 manageOfflineStatus 속성을 발견했습니다. – 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!"); 
    } 
}; 

(당신은 이미지가 영원히 웹 사이트에 될 것이라고 의존하지 수)는 신뢰할 수있는 솔루션이 아니다으로, 그러나

--update

(http://crynobone.com/ci/index.php/archive/view/852에서) 가장 좋은 해결책은 새로운 XPCom 구성 요소를 개발하는 것입니다.

+0

좋아,이 이미지 URL에 대해서만 작동합니다, 나는 HTML 페이지에 대해 그런 것이 필요합니다 .. –

+0

@ 톰 : 글쎄,이 솔루션은 실제로 아주 청초합니다. 이미지는 연결이 있는지 확인하는 것입니다. 그 후에 연결을 확인한 것처럼 html 페이지를로드 할 수 있습니다. – Tokimon

+0

@Tokimon 신뢰할 수있는 솔루션이 아니기 때문에 항상 웹상의 이미지를 신뢰할 수는 없습니다. –

5

navigator.onLine을 사용할 수 있어야합니다. 다음 도움말 페이지

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

에게 있습니다 navigator.onLine는 (오프라인 거짓 온라인 마찬가지) 은 참/거짓 값을 유지하는 속성입니다. 이 속성은 사용자가 (Firefox에서 파일 오프라인 작업) 해당 메뉴 항목을 선택하여 "오프라인 모드"로 전환 할 때마다 업데이트됩니다.

또 다른 해결책 (@Neil 댓글을 달았로) : 내가 찾은

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

누군가가 네트워크 코드를 잡아 당긴다는 사실을 알려주지는 않겠지? – corsiKa

+0

내 응용 프로그램조차도 네트워크 케이블이 타임 아웃되거나 올바른 IP 주소가 없을 때까지 잡아 당겼다는 것을 항상 알지 못하기 때문에 나는 그 생각에 대해 생각하고있었습니다. 나는 당신을 위해 더 좋은 대답을하지 못한다. ( –

+0

오늘 아래 표는 무엇인가? :( –

0

어 ... HTML5 (읽기 echmascript 5 읽기)의 경우 on-/offline 이벤트를 사용할 수 있습니다.

Mozilla Hacks

편집 20/4/2011에 여기를 참조하십시오
난 그냥이 답변에 대한 업데이 트를 발견, 내가 MS MIX11에서 팟 캐스트를보고 할 때 시간 : 43:36 주위
http://channel9.msdn.com/Events/MIX/MIX11/HTM14, 강사는 사실 브라우저 (및 컴퓨터)가 온라인인지 여부를 감지하는 데 사용하는 window.navigator.onLine 속성에 대해 실제로 말하고 있습니다. 그런 다음 그는 online 이벤트를 사용하여 온라인 상태가되면 다시 작업을 수행합니다.

그러나이 방법은 최신 브라우저에서만 사용할 수 있습니다. 따라서 Internet Explorer 8 이하에서는 연결을 폴링해야합니다.

+0

[이 페이지] (http://help.dottoro.com/ljnasgpu.php)에 따르면이 이벤트는 IE 8 이상 및 FF 3 이상에서 지원됩니다. – Tokimon

+0

잘 알고 있습니다! unzornately, 모질라 페이지의 예제는 항상 나에게 "온라인"을 보여줍니다. 실제 케이블을 뽑아서 파일을 열어도. –

+0

또한 Google 크롬이 포함 된 html5 태그가 작동하지 않습니다. 전환하려면 '파일 -> 오프라인'을 클릭해야하지만 Google 크롬에서는 해당 옵션을 사용할 수 없으므로 연결이 끊어짐을 인식하지 못할 것입니다. 슬픈, 좋은 해결책처럼 보였다 .. –

관련 문제