Googleを検索して、例としてEtsy.comをクリックすると、WKWebViewがiPhoneにインストールされているEtsyアプリにリダイレクトします。この動作を無効にするにはどうすればよいですか? WKWebViewを使用してetsy.comモバイルWebサイトにリダイレクトします。私はSwiftを使用しています。
残念ながら、WKWebView
は、カスタムスキームを含むURLをアプリに返送して自動的に処理することはありません。
特別な処理を行わずにこれを実行すると、ユーザーがサードパーティサービスで認証された後にWebビューがハングし、コールバックが受信されないように見えます。標準のhttpまたはhttpsスキームでリダイレクトURIを使用してみることができますが、WKWebView
は、処理するためにWebビューからリダイレクトしてネイティブアプリに転送するのではなく、単にロードしようとします。
リダイレクトを処理するには、カスタムを検出するためにdecidePolicyForNavigationAction
のWebPolicyDelegate
にWKWebView
を実装する必要があります[〜#〜 ] url [〜#〜]スキームを使用して、処理するアプリに転送します。
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: ((WKNavigationActionPolicy) -> Void)) {
print("webView:\(webView) decidePolicyForNavigationAction:\(navigationAction) decisionHandler:\(decisionHandler)")
let app = UIApplication.sharedApplication()
let url = navigationAction.request.URL
let myScheme: NSString = "https"
if (url!.scheme == myScheme) && app.canOpenURL(url!) {
print("redirect detected..")
// intercepting redirect, do whatever you want
app.openURL(url!) // open the original url
decisionHandler(.Cancel)
return
}
decisionHandler(.Allow)
}
詳細情報はこちら こちら
etsyアプリをインストールし、Safariで「etsy」を検索して最初の結果(etsy.com)をタップすると、Etsyアプリが起動することを確認しました。
xcodeでテスト「シングルビューアプリケーション」を作成し、ViewController
のviewDidLoadに以下の行を追加しました。
override func viewDidLoad() {
super.viewDidLoad()
let webView = WKWebView(frame:view.bounds, configuration: WKWebViewConfiguration())
view.addSubview(webView)
webView.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.com")!))
}
etsyを検索して最初の結果をクリックすると、テストアプリでetsy.comに移動します(Etsyアプリにジャンプしません)。
wKWebViewがリダイレクトを許可する原因となる可能性のある、コード内の他のことを行いましたか?