15

我正在使用 Phonegap。我需要定期检查网络连接。实际上我正在从服务器获取一些数据。如果没有连接,我需要显示错误警报。

我用谷歌搜索并找到了解决方案。但这不行。因为我需要定期检查连接。

<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>

它仅在应用程序启动时第一次检查。但是我需要定期检查它,因为我正在做套接字编程。如果互联网有问题,我需要显示它。但此代码仅在启动时显示。

4

4 回答 4

26

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

使用间隔计时器在每个预定义的时间检查互联网连接。此解决方案需要 HTML5 浏览器,但这不是问题,因为 jQuery Mobile 已经需要 HTML5 浏览器。在这种情况下,计时器将每 100 毫秒检查一次互联网连接,并将最终结果设置为 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 IE9 和 IE10

  • 安卓 4.1.1 铬

  • iPad 3 Safari

  • iPad3 铬

于 2013-06-29T07:09:55.527 回答
6

也许您可以使用文档上的“在线”和“离线”事件侦听器来通知您的应用程序何时在线或离线,如文档中所述。在这里:http ://docs.phonegap.com/en/3.2.0/cordova_events_events.md.html#online

于 2013-12-03T13:11:42.037 回答
4

不幸的是,答案在 Chrome 和 Safari 以及一些移动浏览器上并不稳定。它不会为您提供“真正的 Internet 连接”状态,而是“网络连接状态”。看:

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

“在 Chrome 和 Safari 中,如果浏览器无法连接到局域网 (LAN) 或路由器,则它处于脱机状态;所有其他条件都返回 true。因此,虽然您可以假设浏览器在返回假值,你不能假设真值一定意味着浏览器可以访问互联网。你可能会得到误报,例如在计算机运行虚拟化软件的情况下,该软件具有始终“连接”的虚拟以太网适配器。 “因此,如果你真的想确定浏览器的在线状态,你应该开发额外的检查方法。要了解更多信息,请参阅 HTML5 Rocks 文章,Working Off the Grid。”

有关真正稳定的解决方案,请参阅此 HTML5 Rocks 文章 - 当然还有更多工作:

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

于 2013-08-22T17:56:02.797 回答
0

试试这个代码,

<script>
        $(document).ready(function () {
            document.addEventListener("deviceready", onDeviceReady, false);
            document.addEventListener("online", onOnline, false);
            document.addEventListener("offline", onOffline, false);

        function onDeviceReady() {
            //onDeviceReaddy
        }

        function onOnline() {
            //onOnline
        }

        function onOffline() {
            navigator.notification.alert(
                'Please Check your internet connection.', // message
                null, // callback
                'AllCare Doctor', // title
                'OK' // buttonName
            );
        }

 </script>

更多详情请点击这里..!

于 2019-04-17T08:10:30.150 回答