我在Swift中有一个iOS应用程序,我在其中显示UIWebView
,其中显示从WebService接收的内容(我无法控制)。其中一些URL是不安全的HTTP地址,因此当我收到应用传输策略错误时,我实现了一个小机制来在Safari中打开URL:
// MARK: UIWebViewDelegate
func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
guard let error = error else { return }
NSLog("Received error: \(error)")
if error.domain == NSURLErrorDomain && error.code == NSURLErrorAppTransportSecurityRequiresSecureConnection {
NSLog("App transport policy error")
// Open in safari
//UIApplication.sharedApplication().openURL(url)
}
}
到目前为止工作正常,当我尝试打开(或导航到)不安全的网址时,拦截了NSURLErrorAppTransportSecurityRequiresSecureConnection
错误,然后我关闭了网页浏览并打开了Safari。
但是,当HTML使用一些不安全的资源时,页面不会加载但我没有错误。例如,以下HTML:
<html>
<head>
<style type="text/css"></style>
</head>
<body>
<p><img src="http://i.imgur.com/nwo13SM.png" style="width:100%"></p>
</body>
</html>
在命令行中删除错误消息:
App Transport Security已阻止明文HTTP(http://)资源加载,因为它不安全。可以通过应用程序的Info.plist文件配置临时例外。
但是没有调用webview委托方法,所以我最终得到一个充满错误的页面,而不是在Safari中打开。
有没有办法检测/拦截这些不安全的内容错误,以便在Safari中打开网址?
注意:我不想加载不安全的内容。我想检测它并将其重定向到Safari。