我正在寻找一个很好的解决方案来检测我的应用程序中的在线/离线状态。navigator.onLine apprache 不起作用,至少对于当前版本的 chrome,我认为不可靠。应用程序位置和服务器端点可能不同,所以我真正想要的是检查服务器是否离线。我不介意用户是否可以使用 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,因为它们已被缓存。因此,在检查应用程序是否再次在线时,应忽略缓存的请求或获取模板。