如何使用 WKWebview 检查 Link 是否损坏?

How to check if Link is broken with WKWebview?

我用WKWebview加载一个URL。

let webView = WKWebview()
let request: NSMutableURLRequest = NSMutableURLRequest(URL: url!)
webView.loadRequest(request)

如何检测应该加载的 link webView 是否损坏?

可以使用canOpenUrl方法:

UIApplication.sharedApplication().canOpenURL(url)

它将进行 url 验证,如果 link 正常,则 returns 为真。 它主要在你打电话之前使用:

UIApplication.sharedApplication().openURL(url) 

确保此 link 可以在 safari 中打开,但它在这里也应该对您有所帮助。

确保 link 以 http:// 或 https:// 开头。

已编辑:

它只会检查 link 是否正确 url。

如果你想查看页面离线、授权问题等,你可以实现WKNavigationDelegate协议并查看这个方法:

- webView:didFailNavigation:withError:

这应该能为您提供更多信息。

使用总是好的主意:str.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAl‌​lowedCharacterSet())! 它确保您不传递 URL.

中不允许的字符

已编辑 2: 要检测状态代码,您可以尝试实现:

- webView:decidePolicyForNavigationResponse:decisionHandler:

导航响应是一个 NSURLResponse 实例但是 每当您发出 HTTP 请求时,您返回的 NSURLResponse 对象实际上是 NSHTTPURLResponse class 的一个实例,因此您应该将其转换为 NSHTTPURLResponse。那应该给你一个 statusCode。 在方法的最后一行中,您应该调用处理程序,例如 decisionHandler(WKNavigationResponsePolicyAllow).

如果你想检查 url 字符串是否正确有效 - 只需创建 NSURL 对象,如果路径包含错误,它将转换为 nil:

let string = "http://google.com"
let url = NSURL(string: string)

let brokenString = "http:\brokenurl.12"
let brokenUrl = NSURL(string: brokenString) // nil - it's not valid!

参考:

if let url = NSURL(string: yourUrlString) {
    var canOpen = UIApplication.sharedApplication().canOpenURL(url)
 }

如果您已经实现了 NSURLConnectionDelegate,那么可以使用下面的解决方案。

didFailWithError NSURLConnectionDelegate 方法可用于此。

如果在加载资源期间发生错误,将调用此方法。

可以参考下面link https://developer.apple.com/documentation/foundation/nsurlconnectiondelegate/1418443-connection