2017-01-24 6 views
1

私がやりたいことは、UIWebViewに表示されているリンクをクリックすることでSafariでWebサイトを開くことです。UIWebViewのSafariでリンクを開きます

私は、上の質問/回答はを読んで始めた:私は次のことを実施しAfterwhich 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

あなたの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> 

この情報はお使いのアプリに基本的に設定されています。それは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

+0

最初の動作の仕組みをもう少し詳しく説明してください。なぜ2番目の動作が推奨されないのですか?助けてくれてありがとう:)私はXcode/Swiftにまだまだ新しいです – Diesel

+0

編集ありがとう!その細かいディテールが役立ちます。私が今問題を抱えているのは、リンクがSafariの代わりに同じUIWebViewで開かれていることです。助言がありますか? – Diesel

+0

まだUIApplication.sharedApplication()。openURLコードがありますか? – faircloud

関連する問題