Обнаружение «онлайн» и «офлайн» angular 8 - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть следующий сервис для проверки сетевого подключения:

export class InternetService {
public connectionChanged = new BehaviorSubject<boolean>(false);
public connState =  true;
constructor(private apiService: ApiService) {
    if (navigator.onLine)
        this.statusChanged(true);
    else
        this.statusChanged(false);
    this.addEventListeners();
}
private addEventListeners() {
    window.addEventListener('online', () => this.statusChanged(true));
    window.addEventListener('offline', () => this.statusChanged(false));
}

testConnection() {
    this.apiService.callMyMethod().subscribe(res => {
        this.connected(true);
    }, error => {
        this.connected(false);
    });
}
statusChanged(connected: boolean) {
    if (connected) {
        this.testConnection();
    } else {
        this.connected(false);
    }
}
connected(data: boolean) {
    this.connState = data;
    this.connectionChanged.next(this.connState);
}
}

Функции кода хорошо работают в Edge Browser, но не в Chrome. Я понимаю, что существует проблема для Chrome согласно следующей ссылке:

https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine

В Chrome и Safari, если браузер не может подключиться к локальной сети (LAN) или маршрутизатору, он отключен; все остальные условия возвращают истину. Таким образом, хотя вы можете предполагать, что браузер находится в автономном режиме, когда он возвращает ложное значение, вы не можете предполагать, что истинное значение обязательно означает, что браузер может получить доступ к inte rnet. Вы можете получать ложные срабатывания, например, в тех случаях, когда на компьютере запущено программное обеспечение для виртуализации с виртуальными адаптерами rnet, которые всегда «подключены». Поэтому, если вы действительно хотите определить онлайн-статус браузера, вы должны разработать дополнительные средства для проверки.

В основном на chrome:

(1) navagator .onLine всегда возвращает true; (2) когда я отключаю или переподключаю WiFi, два события «onLine» или «offLine» ничего не делают.

Есть ли альтернативный способ получения событий, когда WiFi отключен или повторно подключен?

...