没有互联网连接时如何提醒用户

Posted

技术标签:

【中文标题】没有互联网连接时如何提醒用户【英文标题】:How to alert the user when there's no internet connection 【发布时间】:2012-05-07 12:17:41 【问题描述】:

我需要在以下情况下提醒用户;

    请求超时 没有互联网连接 无法访问服务器

这是代码;发生以下情况时如何捕捉并提醒用户?

failure: function (response) 
    var text = response.responseText;
    console.log("FAILED");
,success: function (response) 
    var text = response.responseText;
    console.log("SUCCESS");

我尝试了以下代码来检查互联网是否可以访问,但它不起作用

var networkState = navigator.network.connection.type
    alert(states[networkState]);
    if (networkState == Connection.NONE)
        alert('No internet ');
    ;

更新**

我在 index.html 中添加了以下内容,但是,当我禁用 WIFI 时,我看不到警报弹出。

<script>
function onDeviceReady() 
    document.addEventListener("offline", function() 
        alert("No internet connection");
    , false);

</script>

【问题讨论】:

控制台日志中抛出什么错误/警告? 【参考方案1】:

最好的办法是收听“offline”事件。当您收到离线事件时,您可以警告您的用户并采取任何必要的步骤来保存数据等。

例如,您的“设备就绪”回调:

document.addEventListener("offline", function() 
    alert("No internet connection");
, false);

此代码应该适用于所有版本的 PhoneGap。至少从 1.0 版本开始就存在。

【讨论】:

确保您在 manifest.xml 中拥有 INTERNET 和 READ_PHONE_STATE 权限。此外,如果您最近将 PhoneGap 升级到 1.6 或 1.7,请确保您的 plugins.xml 引用“NetworkStatus”而不是“Network Status”,名称已更改以删除空格。 @SimonMacDonald:我关闭了 Wi-Fi,我尝试了所有代码,但没有得到结果。那是因为我在模拟器上吗?我使用科尔多瓦 2.0 @alibm 这很难说。您可能没有收到离线事件,因为模拟器可以伪造 3G 连接。尝试将模拟器置于飞行模式。 很棒的西蒙!非常感谢:-)【参考方案2】:

正如西蒙所说,你可以使用

document.addEventListener("offline", youCallbackFn, false);

或者你可以询问布尔属性

navigator.onLine

(应该返回真或假)

但是,这种技术会告诉您设备是否已连接。需要注意的是,设备可以连接到 WiFi,但路由器可能处于离线状态。在这种情况下,请使用轮询机制,例如及时的Ext.Ajax.request 并减少超时。超时过期 = 离线。

【讨论】:

【参考方案3】:

您可以使用PhoneGap's NETWORK API

网络对象允许访问设备的蜂窝和 wifi 连接信息。

您可以通过以下方式对其进行测试,

 function onDeviceReady() 
        navigator.network.isReachable("phonegap.com", reachableCallback, );
    

 // Check network status
 //
 function reachableCallback(reachability) 
     // There is no consistency on the format of reachability
     var networkState = reachability.code || reachability;
     var states = ;
     states[NetworkStatus.NOT_REACHABLE]  = 'No network connection';
     states[NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK] = 'Carrier data connection';
     states[NetworkStatus.REACHABLE_VIA_WIFI_NETWORK] = 'WiFi connection';

     alert('Connection type: ' + states[networkState]);
  

【讨论】:

我应该在哪里添加上述功能(onDeviceReady reachableCallback )。是在app.js吗? 您可以在任何您想测试网络连接的地方直接包含navigator.network.isReachable("phonegap.com", reachableCallback, ); 行并添加回调函数。 最新版本的 PhoneGap 已弃用 isReachable 方法。【参考方案4】:

您可以在应用程序的 app.js 中添加“Ext.device.Connection”。并使用代码检查您的设备是在线还是离线:

if (Ext.device.Connection.isOnline()) 
         alert('Connected to internet');
      
      else
         alert('You are not connected to internet');
      

【讨论】:

【参考方案5】:

只需将其嵌入到您的标签中

<body onoffline="alert('PLEASE CHECK YOUR INTERNET SETTING');">

【讨论】:

以上是关于没有互联网连接时如何提醒用户的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止用户,如果他/她在我的应用程序加载时没有连接到互联网连接

检查是不是有互联网连接 webView 没有出现

使用可达性通知用户互联网连接

Swift:没有互联网连接时如何在 webview 中显示错误消息? [复制]

没有可用的互联网连接时如何添加自定义错误页面

iOS应用程序没有互联网连接时如何禁用segue?