从UIWebView打开Safari中的链接

时间:2017-01-24 17:18:41

标签: swift safari uiwebview xcode7

我要做的是在Safari中打开一个网站,让用户点击我的UIWebView中显示的链接。

我首先阅读了以下问题/答案: Open specific link in Safari from UIWebView

之后我实施了以下内容:

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
}

然而,当尝试使用链接时,我仍然会收到错误

“App Transport Security已阻止明文HTTP(http://)资源加载,因为它不安全。可以通过应用程序的Info.plist文件配置临时例外。”

我认为我有90%的方式,但我不确定如何编辑我的.plist以允许异常。或者,如果还有其他我错过的东西。

(我会将此作为对原帖的评论添加,但我的排名还不够高)

1 个答案:

答案 0 :(得分:0)

您需要在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://域,这可能是一个安全问题,因为它可能使您的应用容易受到中间人攻击。

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