###前提・実現したいこと
閲覧ありがとうございます。
現在UIwebviewからWkwebviewへの移行作業を行なっており、完全につまづいてしまいました。
知恵をお貸しいただきたいです。
実現したい動作としては、
『PDF出力のURLをクリックした場合だけ、アプリ内ブラウザではなく、safariで起動したい。』です。
UIwebviewの時はうまく動作しておりました。
###発生している問題・エラーメッセージ
UIwebviewからWKwebviewに移行した際に、上記の動作が反応せず、PDFがアプリ内ブラウザで表示されるようになってしまった。
###該当のソースコード
swift
1 func webView(webView: WKWebView!, createWebViewWithConfiguration configuration: WKWebViewConfiguration!, forNavigationAction navigationAction: WKNavigationAction!, windowFeatures: WKWindowFeatures!) -> WKWebView! { 2 3 if navigationAction.navigationType == WKNavigationType.FormSubmitted{ 4 let pattern = "PDFのURL" 5 let flag = Regexp(pattern).isMatch(String(navigationAction.request.URL!)) 6 print(flag) 7 print(navigationAction.request.URL!) 8 if flag { 9 UIApplication.sharedApplication().openURL(navigationAction.request.URL!); 10 } 11 } 12 13 if navigationAction.navigationType == WKNavigationType.LinkActivated{ 14 let pattern = "PDFのURL" 15 let flag = Regexp(pattern).isMatch(String(navigationAction.request.URL!)) 16 print(flag) 17 print(navigationAction.request.URL!) 18 if flag { 19 UIApplication.sharedApplication().openURL(navigationAction.request.URL!); 20 } 21 } 22 23 return nil 24 } 25 26import Foundation 27 28class Regexp { 29 let internalRegexp: NSRegularExpression 30 let pattern: String 31 32 init(_ pattern: String) { 33 self.pattern = pattern 34 self.internalRegexp = try! NSRegularExpression( pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive) 35 } 36 37 func isMatch(input: String) -> Bool { 38 let matches = self.internalRegexp.matchesInString( input, options: [], range:NSMakeRange(0, input.characters.count) ) 39 return matches.count > 0 40 } 41 42 func matches(input: String) -> [String]? { 43 if self.isMatch(input) { 44 let matches = self.internalRegexp.matchesInString( input, options: [], range:NSMakeRange(0, input.characters.count) ) 45 var results: [String] = [] 46 for i in 0 ..< matches.count { 47 results.append( (input as NSString).substringWithRange(matches[i].range) ) 48 } 49 return results 50 } 51 return nil 52 } 53}
###試したこと
WKwebviewではtarget = _blankが反応しないということで、その対応を行い、それについては解決しました。
以下がソースです。
func webView(webView: WKWebView, createWebViewWithConfiguration configuration: WKWebViewConfiguration!, forNavigationAction navigationAction: WKNavigationAction!, windowFeatures: WKWindowFeatures!) -> WKWebView! { if navigationAction.targetFrame == nil { UIApplication.sharedApplication().openURL(navigationAction.request.URL!); } }
###補足情報(言語/FW/ツール等のバージョンなど)
ios9以上が対象です。
申し訳ありませんが、もしご存知でしたら解決方法をお教えください。
よろしくお願い致します。
あなたの回答
tips
プレビュー