无法拦截UIWebView中的App Transport Policy错误

时间:2016-03-29 16:45:00

标签: ios swift uiwebview

我在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。

0 个答案:

没有答案