UIWebView 和 NSURLRequest 上没有 Internet 连接处理 [重复]

Posted

技术标签:

【中文标题】UIWebView 和 NSURLRequest 上没有 Internet 连接处理 [重复]【英文标题】:No Internet Connection Handling on UIWebView and NSURLRequest [duplicate] 【发布时间】:2011-08-13 16:04:31 【问题描述】:

我有一个完全基于网络的应用程序,需要互联网连接才能浏览。基本上是通过 UIWebView 查看的网站。

我需要能够告诉用户,如果他们没有互联网连接,则无法加载任何页面。有没有一种简单的方法可以做到这一点。也许检查 NSURLRequest 是否失败?

干杯

【问题讨论】:

【参考方案1】:

我会查看 Apple 的 Reachability 示例代码以可靠地实现这一点。这种方法的一个优点是,即使用户实际上并未点击 Web 视图中的任何链接,您也可以通知用户当前的网络状态。

【讨论】:

【参考方案2】:

请检查以下内容 ***1 ***2 ***3

【讨论】:

【参考方案3】:

1>将 SystemConfiguration.framework 添加到您的项目中

2>在您的 Connection.h 文件中导入以下 .h 文件

#import <sys/socket.h>
#import <netinet/in.h>
#import <SystemConfiguration/SystemConfiguration.h>

3>在 Connection.h 文件中声明以下类方法

+(BOOL)hasConnectivity;

4>在你的 Connection.m 文件中定义这个方法

+(BOOL)hasConnectivity 

struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)&zeroAddress);
if(reachability != NULL) 
    //NetworkStatus retVal = NotReachable;
    SCNetworkReachabilityFlags flags;
    if (SCNetworkReachabilityGetFlags(reachability, &flags)) 
        if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)
        
            // if target host is not reachable
            return NO;
        

        if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
        
            // if target host is reachable and no connection is required
            //  then we'll assume (for now) that your on Wi-Fi
            return YES;
        


        if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||
             (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))
        
            // ... and the connection is on-demand (or on-traffic) if the
            //     calling application is using the CFSocketStream or higher APIs

            if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)
            
                // ... and no [user] intervention is needed
                return YES;
            
        

        if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
        
            // ... but WWAN connections are OK if the calling application
            //     is using the CFNetwork (CFSocketStream?) APIs.
            return YES;
        
    


return NO;

【讨论】:

以上是关于UIWebView 和 NSURLRequest 上没有 Internet 连接处理 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Swift中的UIWebView中加载URL?

从 UIWebView 委托呈现 ViewController

全屏UIWebView隐藏状态栏

UIWebView 错误 -999 [重复]

使用 UIWebView 查看加密数据

在UIWebView中检测下载