在jQuery .click()上的UIWebView应用程序中检查Internet

时间:2012-09-01 14:41:40

标签: iphone ios xcode reachability internet-connection

首次打开应用时,我会使用此代码检查互联网:

//No Internet Connection error code
-(void)webView:(UIWebView *)webVIEW didFailLoadWithError:(NSError *)error {
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection!" message:@"In order to use this app you need an active Internet connection!" delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil, nil];
   [alert show];  
}

//Close app from Alert View
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
exit(0);
}

我有一个UIWebView应用程序,它有一个jQuery .click()函数。有没有办法在用户点击该按钮后再次检查Internet?

4 个答案:

答案 0 :(得分:1)

看看Apple的示例代码。 Reachability项目显示了如何检测连接

http://developer.apple.com/iphone/library/samplecode/Reachability/index.html

答案 1 :(得分:1)

请注意,点击不一定会通过网络连接请求更多资源。

UIWebViewDelegate有一个webView:shouldStartLoadWithRequest:navigationType选择器,将成为您的朋友。要随时触发(在单击或其他操作上),请将隐藏iframe的源设置为某个虚拟值,并在委托方法中检查该值(将运行测试并返回NO。< / p>

我建议不要在没有连接的情况下退出,因为用户可能会将其视为崩溃,特别是如果他们的连接丢失只是暂时的(通过隧道)。此外,反复测试连接可能会不必要地降低您的应用程序速度,并为用户带来更多数据费用。

答案 2 :(得分:1)

你可以这样做:

在函数click()中你应该添加这段代码:

window.location = "fake://myApp/checkForInternet";
你的Objective-C代码中的

添加了这个:

-(BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *link = request.URL.absoluteString;

    if ([link isEqualToString:@"fake://myApp/checkForInternet"])
    {
            // check for Reachability here
        return NO;
    }

    return YES;
}

请注意,在此示例中,-webView:shouldStartLoad ...仅在webView中的每个事件中调用一次。如果你想在一个事件中的一个javascript函数中检查两次或更多次,我可以提供更复杂的代码

阅读有关检查可达性的信息,正如@ Rajneesh071所说,在Apple文档中或here是GitHub上的项目

答案 3 :(得分:1)

如果您正在使用Apple的可达性代码或类似代码,那么您需要currentReachabilityStatus方法;否则调用基础SCNetworkReachabilityGetFlags函数