WKWebViewのAppStoreのリンクをストアアプリで開く
UIWebViewでAppStoreのリンクをタップすると自動でストアアプリで開いてくれましたが
WKWebViewでは自前で実装する必要があるようです。
やることは以下
- WkWebViewの画面遷移をフック
- 正規表現でURLがストアへのリンクかチェック
- AppStoreのリンクなら、ストアアプリで開く
↓ソースです
swift2.0以降
override func viewDidLoad() {
super.viewDidLoad()
// WkWebViewをViewに貼り付け
self.wkWebView = WKWebView()
self.view = self.wkWebView!
var url = NSURL(string:"http://www.yahoo.co.jp/")
var req = NSURLRequest(URL:url)
self.wkWebView!.loadRequest(req)
self.wkWebView.navigationDelegate = self
}
// MARK: - WkWebViewの画面遷移をフック
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
let url = navigationAction.request.URL
let urlString = ((url) != nil) ? url!.absoluteString : ""
if isMatch(urlString,pattern: "\\/\\/itunes\\.apple\\.com\\/") {
// AppStoreのリンクなら、ストアアプリで開く
UIApplication.sharedApplication().openURL(url!)
decisionHandler(WKNavigationActionPolicy.Cancel)
}
decisionHandler(WKNavigationActionPolicy.Allow)
}
// MARK: - 正規表現でマッチング
func isMatch(input: String, pattern:String) -> Bool {
let regex = try! NSRegularExpression( pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)
let matches = regex.matchesInString( input, options: [], range:NSMakeRange(0, input.characters.count) )
return matches.count > 0
}