没有互联网连接时如何提醒用户
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');">
【讨论】:
以上是关于没有互联网连接时如何提醒用户的主要内容,如果未能解决你的问题,请参考以下文章
如何阻止用户,如果他/她在我的应用程序加载时没有连接到互联网连接