检测GWT中的离线和在线状态

时间:2014-04-01 04:14:24

标签: java gwt asynchronous

我正在构建一个GWT应用程序,并希望检测用户是否有互联网连接。 我的主要问题是在进行异步调用时检测互联网。 我们主要使用Chrome浏览器。

我试过用这个:

public void onFailure(Throwable caught) {

if (caught instanceof StatusCodeException
                && ((StatusCodeException) caught).getStatusCode() == 0) {
            return "NoInternetConnnectivity";   
            }

但我发现除了互联网连接外,我们在许多其他情况下收到0作为状态代码。

2 个答案:

答案 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;
    }-*/;

然后在客户端代码中使用此方法。