アプリ内のオンライン/オフライン ステータスを検出するための優れたソリューションを探しています。navigator.onLine アプローチは、少なくとも現在のバージョンのクロムでは機能しておらず、信頼性がないと思います。アプリの場所とサーバーのエンドポイントが異なる場合があるため、サーバーがオフラインかどうかを確認することが本当に必要です。ユーザーが google.com を使用できるかどうかは気にしません。サーバーがネットワーク内にあり、応答している限り、アプリはインターネットなしでも動作する可能性があります.
私のアプローチはインターセプターを使用しています:
$provide.factory('httpOfflineCheckInterceptor', ['$q', '$rootScope', function($q, $rootScope){
return {
'response': function(response) {
/** what am I missing here? **/
return response;
},
'responseError': function(rejection) {
if(rejection.status === -1) {
$rootScope.appIsOffline = true;
}
return rejection;
}
}
}]);
$httpProvider.interceptors.push('httpOfflineCheckInterceptor');
したがって、作成された各 http 要求に対して、応答を確認します。アプリがオフラインかどうかの検出は正常に機能します。注意が必要なのは、アプリが再びオンラインになっているかどうかを確認することです。「応答」、http 要求をキャッシュします。一部の応答のステータスは、キャッシュされているため、オフラインであっても 200 です。そのため、アプリが再びオンラインかどうかを確認するときは、キャッシュされたリクエストまたはテンプレートの取得を無視する必要があります。