首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何允许WKWebView接受重定向url?

如何允许WKWebView接受重定向url?
EN

Stack Overflow用户
提问于 2017-12-10 23:12:40
回答 1查看 9.6K关注 0票数 1

在将用户从WKWebView重定向到链接时遇到一些问题。

用户本质上是使用WKWebView在网站上进行身份验证,网站检查身份验证,这反过来又将用户重定向回我们的应用程序。

我最初的想法是有某种限制,允许用户在重定向过程中退出应用程序。这就是为什么我实现了WKNavigationDelegate,并看到当我们尝试验证下面的代码时,didReceive的挑战会贯穿于第二种情况--我只是假设这是一件好事。尽管应用程序没有被重定向。

下面是我的代码。

代码语言:javascript
运行
复制
import UIKit
import WebKit

class WebViewViewController: UIViewController, WKUIDelegate,       WKNavigationDelegate {

    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.navigationBar.isHidden = false
        tabBarController?.tabBar.isHidden = true
        webView.navigationDelegate = self
        if let url = URL(string: "SomeUrl") {
            let request = URLRequest(url: url)
            webView.load(request)
        }
    }

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }

    override func viewWillAppear(_ animated: Bool) {
        self.navigationController?.navigationBar.isHidden = false
    }

    override func viewWillDisappear(_ animated: Bool) {
        self.tabBarController?.tabBar.isHidden = false
    }

    func webViewDidFinishLoad(_ webView: UIWebView) {
        if let URL = webView.request?.url {
            OAuthHelper.oAuthManager.processOAuthStep1Response(url: URL)
        }
    }

    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {

    }

    func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {

    }

    func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
        if challenge.previousFailureCount > 0 {
            completionHandler(Foundation.URLSession.AuthChallengeDisposition.cancelAuthenticationChallenge, nil)
        } else if let serverTrust = challenge.protectionSpace.serverTrust {
            completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust: serverTrust))
        } else {
            print("unknown state. error: \(challenge.error)")
            // do something w/ completionHandler here
        }
    }

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        if (navigationAction.navigationType == .linkActivated){
            decisionHandler(.cancel)
        } else {
            decisionHandler(.allow)
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-12-11 06:39:06

我没有完全理解这个问题。如果问题是如果您希望用户从Webview重定向到本地应用程序,那么您确实有不同的选项。我会提供选择。如果这是你在看的话请告诉我。

  1. 使用WKURLSchemeHandler处理自定义URL。读我关于这个的文章。b/custom-scheme-handling-in-uiwebview-wkwebview-bbeb2f3f6cc1https://github.com/BKRApps/KRWebView
  2. 您将在func webView(_ webView: WKWebView,decidePolicyFor navigationAction: WKNavigationAction,decisionHandler:@转义(WKNavigationActionPolicy) -> Void)中获取URL,在这里您可以截获URL,然后使用您的URL方案进入本地应用程序。使用OpenUrl进行此操作。但这是不可取的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47744468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档