我要做的是在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以允许异常。或者,如果还有其他我错过的东西。
(我会将此作为对原帖的评论添加,但我的排名还不够高)
答案 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