如何使用 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.URLQueryAllowedCharacterSet())!
它确保您不传递 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
我用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.URLQueryAllowedCharacterSet())!
它确保您不传递 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