web-dev-qa-db-ja.com

iPhoneにインストールされているアプリにリダイレクトするリンクを開くためにWKWebViewを無効にする

Googleを検索して、例としてEtsy.comをクリックすると、WKWebViewがiPhoneにインストールされているEtsyアプリにリダイレクトします。この動作を無効にするにはどうすればよいですか? WKWebViewを使用してetsy.comモバイルWebサイトにリダイレクトします。私はSwiftを使用しています。

18
gal

残念ながら、WKWebViewは、カスタムスキームを含むURLをアプリに返送して自動的に処理することはありません。

特別な処理を行わずにこれを実行すると、ユーザーがサードパーティサービスで認証された後にWebビューがハングし、コールバックが受信されないように見えます。標準のhttpまたはhttpsスキームでリダイレクトURIを使用してみることができますが、WKWebViewは、処理するためにWebビューからリダイレクトしてネイティブアプリに転送するのではなく、単にロードしようとします。

リダイレクトを処理するには、カスタムを検出するためにdecidePolicyForNavigationActionWebPolicyDelegateWKWebViewを実装する必要があります[〜#〜 ] 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)
    }

詳細情報はこちら こちら

8

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がリダイレクトを許可する原因となる可能性のある、コード内の他のことを行いましたか?

0
Casey