如何知道WKWebView是否因用户交互而重定向?

时间:2017-12-01 06:08:00

标签: swift redirect wkwebview

我正在使用WKWebView,当用户执行导致WKWebView转到另一个URL的内容时(例如,单击WKWebView中导致另一个URL的按钮),我需要执行一些代码。我试图通过比较工作网址和原始网址来做到这一点,但是一些重定向并不是我的用户而是网站本身。反正有区别吗?这就是我现在所拥有的:

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

    print(webView.url?.absoluteString)

    if webView.url?.absoluteString != self.workingReult {
        //do something
    }

}

由于

3 个答案:

答案 0 :(得分:1)

确定。这是我对Swift 4的解决方案。

一旦为WKWebView设置了navigationDelegate,就可以实现以下功能,该功能在Web视图导航时随时调用:

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if navigationAction.navigationType == .linkActivated { 
        //Tap on href link case
        decisionHandler(WKNavigationActionPolicy.cancel)
    } else { 
        //Any other case
        decisionHandler(WKNavigationActionPolicy.allow)
    }
}

如您所见,您可以使用 navigationAction.navigationType 获取导航操作的触发器。就我而言,我阻止用户浏览链接,但是您可以根据需要对其进行自定义。

请记住,在任何情况下都必须包含DecisionHandler。

您可以检查其余的WKNavigationType常量案例here

答案 1 :(得分:0)

你可以使用其中任何一个,

 func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
    let currentURL : NSString = (webView.URL!.host)!
    //print("The current String is\(currentURL)")
    if currentURL.containsString("test.com") 
    {
   //handle your actions here
    }
    print("finish to load")
   }

或者您可以使用此比较您的网址

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
let app = UIApplication.sharedApplication()
let url = navigationAction.request.URL
//handle your events from here
}

答案 2 :(得分:0)

要查看重定向URL,请像这样检查来自navigationAction而不是webview.url的URL。

    override internal func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    super.webView(webView, decidePolicyFor: navigationAction, decisionHandler: decisionHandler)
    let request = navigationAction.request
    if let url = request.url {
    //here you can compare your url
    }

}