从 UIWebView 在 Safari 中打开 link

Open link in Safari from UIWebView

我想做的是在 Safari 中打开一个网站,方法是让用户单击显示在我的 UIWebView 中的 link。

我首先通读了 question/answers:

之后我执行了以下操作:

class HomeInfoView: UIViewController, UIWebViewDelegate{

override func viewDidLoad() {
    super.viewDidLoad()

    let localfilePath = NSBundle.mainBundle().URLForResource("homeInfo", withExtension: "html");
    let myRequest = NSURLRequest(URL: localfilePath!);
    WebViewer.loadRequest(myRequest);
    WebViewer.scrollView.bounces = false
}


func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if let url = request.URL where navigationType == UIWebViewNavigationType.LinkClicked {
        UIApplication.sharedApplication().openURL(url)
        return false
    }
    return true
}

然而,当我尝试使用 link 时,我仍然遇到错误

"App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file."

我想我已经完成了 90%,但我不确定如何编辑我的 .plist 以允许例外。或者如果还有其他我错过的东西。

(我会把这个作为评论添加到原来的 post 但我的排名还不够高)

您需要在 info.plist 中授予对该特定域的权限:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>testdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>
    </dict>
</dict>

你 plist 中的这个信息基本上在你的应用程序中设置了一个例外。它允许您访问 testdomain.com 域(插入您尝试访问的任何域)。它允许您访问所有子域,然后设置最低 TLS 版本以帮助确保您连接到的站点是您想要的站点。

或者您可以简单地允许访问所有http 网站,不推荐这样做。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

不推荐这样做,因为它允许您的应用访问任何 http:// 域,这可能是一个安全问题,因为它会使您的应用容易受到 man-in-the-middle 攻击。

查看 Apple 的文档以了解更多信息。 https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33