我正在构建一个GWT应用程序,并希望检测用户是否有互联网连接。 我的主要问题是在进行异步调用时检测互联网。 我们主要使用Chrome浏览器。
我试过用这个:
public void onFailure(Throwable caught) {
if (caught instanceof StatusCodeException
&& ((StatusCodeException) caught).getStatusCode() == 0) {
return "NoInternetConnnectivity";
}
但我发现除了互联网连接外,我们在许多其他情况下收到0作为状态代码。
答案 0 :(得分:1)
此代码来自vaadin TouchKit offline实现,它是询问浏览器是否在线使用html5的唯一方法。请注意,并非所有浏览器都支持此功能,因此如果该属性不存在,则必须返回true。
private static native boolean isNavigatorOnline()
/*-{
if($wnd.navigator.onLine != undefined) {
return $wnd.navigator.onLine;
}
return true;
}-*/;
但是,这仅适用于某些情况,我会说它仅对移动设备足够可靠。
如果你想确定你的服务器是可以访问的,我会在我的代码中循环来轮询服务器,我会捕获所有服务器ajax响应以检查是否存在服务器故障或网络错误。通常当你得到一个Response.getStatusCode == 0
意味着你无法到达你的服务器(网络故障,服务器故障,CORS错误等)时,你需要考虑IMO以警告用户这样的消息server unreachable, test your connection, ...
答案 1 :(得分:0)
最可靠的方法是依靠HTML5的navigator.onLine方法。您可以添加本机方法:
public static native boolean isOnline() /*-{
return $wnd.navigator.onLine;
}-*/;
然后在客户端代码中使用此方法。