2013-06-29 50 views
15

我正在使用Phonegap。我需要定期檢查網絡連接。其實我從服務器獲取一些數據。如果沒有連接,我需要顯示錯誤警報。如何定期檢查Phonegap中的Internet連接?

我用它搜索並找到了解決方案。但它不好。因爲我需要定期檢查連接。

<html> 
    <head> 
    <title>navigator.network.connection.type Example</title> 
    <script type="text/javascript" charset="utf-8" src="phonegap-1.0.0.js"></script> 
    <script type="text/javascript" charset="utf-8"> 
    // Wait for PhoneGap to load 
    document.addEventListener("deviceready", onDeviceReady, false); 
    function onDeviceReady() { 
     checkConnection(); 
    } 

    function checkConnection() { 
     var networkState = navigator.network.connection.type; 
     var states = {}; 
     states[Connection.UNKNOWN] = 'Unknown connection'; 
     states[Connection.ETHERNET] = 'Ethernet connection'; 
     states[Connection.WIFI]  = 'WiFi connection'; 
     states[Connection.CELL_2G] = 'Cell 2G connection'; 
     states[Connection.CELL_3G] = 'Cell 3G connection'; 
     states[Connection.CELL_4G] = 'Cell 4G connection'; 
     states[Connection.NONE]  = 'No network connection'; 
     alert('Connection type: ' + states[networkState]); 
    } 
    </script> 
    </head> 
    <body> 
    <p>A dialog box will report the network state.</p> 
    </body> 
</html> 

它只檢查應用程序啓動時的第一次。但我需要定期檢查它,因爲我在做套接字編程。如果互聯網有問題,我需要展示它。但此代碼僅在啓動時顯示。

回答

26

工作例如:http://jsfiddle.net/Gajotres/d5XYR/

使用間隔定時器來檢查互聯網連接每一個預定義的時間。這個解決方案需要HTML5瀏覽器,但這不是問題,因爲jQuery Mobile已經需要HTML5瀏覽器。在這種情況下,計時器將每100 ms檢查一次互聯網連接,並將最終結果設置爲一個JavaScript全局變量。

一切都取決於這一行:

window.navigator.onLine -- it will be false if the user is offline. 

最終的解決方案:

var connectionStatus = false; 

$(document).on('pagebeforeshow', '#index', function() { 
    setInterval(function() { 
     connectionStatus = navigator.onLine ? 'online' : 'offline'; 
    }, 100); 
    $(document).on('click', '#check-connection', function() { 
     alert(connectionStatus); 
    }); 
}); 

測試上:

  • 的Windows火狐

  • 的Windows谷歌瀏覽器

  • 的Windows IE9和IE10

  • 的Android 4.1.1瀏覽器

  • iPad的Safari瀏覽器3

  • iPad3的鍍鉻

+1

嗨..在平板電腦和iPad上的這項工作嗎? –

+0

我已經添加了這個解決方案工作成功的平臺。我自己測試過。 – Gajotres

+0

謝謝......請檢查一下我上個星期五發給你的項目代碼。 –

4

很不幸,答案是在Chrome和Safari以及一些移動瀏覽器上不穩定owsers。它不會給你「真正的互聯網連接」狀態,而是「網絡連接狀態」。請參閱:

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

「在Chrome和Safari,如果瀏覽器無法連接到局域網(LAN)或路由器,它處於脫機狀態,所有其他條件返回true,所以,當你可以假設瀏覽器在返回錯誤值時處於脫機狀態,但您不能假定真正的值必然意味着瀏覽器可以訪問互聯網。您可能會得到誤報,例如在計算機正在運行虛擬化軟件的情況下它具有始終「連接」的虛擬以太網適配器。因此,如果您確實想確定瀏覽器的在線狀態,則應該開發其他檢查手段。要了解更多信息,請參閱HTML5 Rocks文章「關閉網格」。「

見一個真正穩定的解決了這個HTML5岩石文章 - 當然更多的工作:

http://www.html5rocks.com/en/mobile/workingoffthegrid/

+0

問題是關於PhoneGap,而不是移動Chrome或Safari。 –

+0

我的答案與移動瀏覽器有關,因爲在新的Android上,WebView是Chrome和iOS上的WebView一直是Safari。而且,即使在Kitkat之前的Android版本中,webview在這方面也接近於chrome。 – christianmenkens