當用戶嘗試登錄沒有互聯網連接,我只需要檢查他/她是否連接到互聯網或沒有。如何檢查用戶有互聯網連接,使用angularJs
我嘗試下面的代碼:
if (status == '404') {
$scope.error="No internet connection";
return false;
}
但這種狀態404來,即使我的Web服務連接失敗。我需要區分兩者,如果是用戶的互聯網連接問題或Web服務連接問題。
當用戶嘗試登錄沒有互聯網連接,我只需要檢查他/她是否連接到互聯網或沒有。如何檢查用戶有互聯網連接,使用angularJs
我嘗試下面的代碼:
if (status == '404') {
$scope.error="No internet connection";
return false;
}
但這種狀態404來,即使我的Web服務連接失敗。我需要區分兩者,如果是用戶的互聯網連接問題或Web服務連接問題。
navigator.onLine
您可以使用navigator.onLine
,敷於輔助變量,像這樣(Credits to this answer)
myApp.run(function($window, $rootScope) {
$rootScope.online = navigator.onLine;
$window.addEventListener("offline", function() {
$rootScope.$apply(function() {
$rootScope.online = false;
});
}, false);
$window.addEventListener("online", function() {
$rootScope.$apply(function() {
$rootScope.online = true;
});
}, false);
});
然後在控制器中觀看它:
$scope.$watch('online', function(newStatus) { ... });
但,只是作爲一個骯髒的檢查,以瞭解PC是否實際連接到網絡,並不意味着互聯網正在工作。
你可以嘲笑,做給瀏覽器的假請求的服務(警告:以下非測試代碼)
myApp.service('Internet', function($http){
this.IsOk = function() {
return $http({ method: 'HEAD', url: '/' + window.location.hostname + "/?rand=" + Math.floor((1 + Math.random()) * 0x10000) })
.then(function(response) {
var status = response.status;
return status >= 200 && status < 300 || status === 304;
});
}
});
而且然後在這方面使用一些東西:
myApp.controller('TestController', function(Internet){
Internet.IsOn().then(function(isok){
if(isok) {...} else {...}
});
});
請求嘲笑代碼this link。
還要注意,它不會使用localhost
,因爲服務器即使在斷開連接到互聯網時也能工作。
爲什麼這些響應代碼呢? 200到300和304? 我曾想過一些4X代碼也適用,例如404 –
有一個JavaScript性能,navigator.onLine
,它返回一個Boolean
值,指定羯羊瀏覽器爲在線模式或離線模式。
navigator
對象包含有關用戶瀏覽器的信息。
它支持所有主流瀏覽器,所以你根本沒有任何問題。
如果*支持所有主流瀏覽器*你的意思是[這種不一致的行爲](http://stackoverflow.com/a/13076434/542251)然後... – Liam
取自MDN的摘要NavigatorOnLine.onLine。
瀏覽器以不同方式實現此屬性。
在Chrome和Safari中,如果瀏覽器無法連接到本地局域網(LAN)或路由器,則它處於脫機狀態;所有其他條件 返回true。因此,儘管您可以假設瀏覽器處於脫機狀態,但它返回的值爲假,但不能假定真實值 必然意味着瀏覽器可以訪問互聯網。如果計算機運行的虛擬軟件具有虛擬以太網適配器 ,且虛擬化軟件始終「連接」,您可能會收到誤報,例如計算機爲 。因此,如果您確實想要確定瀏覽器的在線狀態,您應該開發 其他檢查手段。要了解更多信息,請參閱HTML5 Rocks 文章,關閉網格。
在Firefox和Internet Explorer中,將瀏覽器切換到離線模式 將發送一個錯誤值。所有其他條件都會返回真實值。
通過監聽window.onOnline和window.onOffline上的事件 ,您可以看到網絡狀態的變化。
您可以通過window.navigator.onLine
訪問該信息,但正如文檔所述,它是非常不一致的跨瀏覽器。
您也可以監聽使用window.addEventListener
狀態更改如下:
window.addEventListener("offline", function(e) {alert("offline");})
window.addEventListener("online", function(e) {alert("online");})
它的作品一些,有些時候不..如果禁用網絡它工程,如果我斷開我的有線互聯網連接,它將無法正常工作。 –
您可以使用'navigator.onLine' javascript函數或爲此編寫一個服務,勾選[此鏈接](https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine),因爲這只是一個骯髒的測試來檢查連接,你也可以[模擬一個AJAX請求](http://stackoverflow.com/a/2384227/1431600)。 –
@EvandroSilva:它工作一些,有些時候不..如果禁用網絡它的工作原理,如果我斷開我的有線互聯網連接,它將無法正常工作。 –