Как узнать, не подключена ли сеть? - PullRequest
9 голосов
/ 01 марта 2011

Как я могу узнать в Xul, подключена ли (не) сеть?

- обновить

Использование:

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

это не работает .. Здесь есть отчет об ошибке , но я не думаю, что это как-то связано с этим.

-

На самом деле Я думаю, что невозможно получать уведомления, поскольку даже в Firefox мы никогда не уведомляемся, и пользователь должен вручную пометить «работать в автономном режиме», если он хочетбраузер, чтобы узнать, что он не в сети ..

-

Скриншот мой Firefox "about: config" фильтрация строки "offline", к сожалению, нет "network.manage-offline-статус ":

enter image description here

Ответы [ 3 ]

5 голосов
/ 01 марта 2011

Вы должны быть в состоянии использовать navigator.onLine.Вот страница справки

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

navigator.onLine - это свойство, которое поддерживает значение true / false (true для онлайн, false для оффлайн).Это свойство обновляется всякий раз, когда пользователь переключается в «Автономный режим», выбирая соответствующий пункт меню (Файл -> Работа в автономном режиме в Firefox).

Другое решение (как прокомментировано @Neil):

Components.classes["@mozilla.org/observer-service;1"]
    .getService(Components.interfaces.nsIObserverService)
    .addObserver(myF­unction, "network:offline-status-changed", false);
2 голосов
/ 10 марта 2011

Лучший способ, который я нашел, - это использовать следующий код javascript, который ведет себя как 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)

- обновление

Но, поскольку это не надежное решение (так как вы не можете полагаться на этоизображение будет на сайте навсегда), лучшим решением может стать разработка нового компонента XPCom.

0 голосов
/ 11 марта 2011

Э-э ... в соответствии с HTML5 (см. Echmascript 5) доступны события on-/offline.

См. Здесь на Mozilla Hacks

Редактировать 20/ 4/2011:
Я только что столкнулся с обновлением для этого ответа, когда я смотрел подкаст из MS MIX11:
http://channel9.msdn.com/Events/MIX/MIX11/HTM14 около 43:36, лектор на самом деле говорит о window.navigator.onLine свойство, где он использует его для обнаружения, если браузер (и компьютер) в сети.Затем он использует событие online, чтобы что-то сделать, когда снова подключается к сети.

Однако этот метод доступен только в современных браузерах.Поэтому IE 8 и ниже должны опрашивать соединение.

...