【问题标题】:WKWebView links not workingWKWebView 链接不起作用
【发布时间】:2016-09-27 11:39:45
【问题描述】:

我已经构建了一个Swift iOS 应用程序,其唯一目的是在 WKWebView 的帮助下显示一个网站。

这很好用,但是点击链接(例如在[mailto:] 按钮上)不起作用,因为它无法打开任何东西!

有人对此有解决方案吗?

我已经阅读了很多关于解决这个问题的文章,但我不知道从哪里开始。

感谢您的帮助

[更新:]

下面的代码显示了解决方案

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {

    @IBOutlet var containerView : UIView! = nil
    var webView: WKWebView?

    override func loadView() {
        super.loadView()

        self.webView = WKWebView()
        self.view = self.webView!
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        webView?.navigationDelegate = self
        let url = NSURL(string:"https://google.de")
        let req = NSURLRequest (URL: url!)
        self.webView!.loadRequest(req)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }

    func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {

        let url = navigationAction.request.URL?.absoluteString
        let url_elements = url!.componentsSeparatedByString(":")

        switch url_elements[0] {
        case "mailto":
            openCustomApp("mailto://", additional_info: url_elements[1])
            decisionHandler(.Cancel)

        default:

        }

        decisionHandler(.Allow)
    }

    func openCustomApp(urlScheme:String, additional_info:String){

        if let requestUrl:NSURL = NSURL(string:"\(urlScheme)"+"\(additional_info)") {
            let application:UIApplication = UIApplication.sharedApplication()
            if application.canOpenURL(requestUrl) {
                application.openURL(requestUrl)
            }
        }
    }
}

【问题讨论】:

  • 看起来不错。您是否调试了 decisionPolicyForNavigationAction ?例如网址?基本上你只需要 mailto://tes@test.com
  • 您刚刚解决了问题。下面的答案是正确的方法,上面的代码显示了解决方案。我唯一的问题是 mailto: 链接的格式不正确!谢谢大家

标签: ios swift wkwebview


【解决方案1】:

您必须实现以下方法(WebKit 的一部分),该方法可用于解析此类 URL:

func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void)

这个想法是编写 if 语句以在通过决定之前检查某些 URL 类型。更多信息在这里:

请记住,在 Swift 3 中,委托的一些语法略有变化——使用教程时要牢记这一点。如果您已经找到了这个但遇到了错误 - 请发布您的代码。

编辑: 只是为偶然发现此问题的其他人提供的更新。请记住,您需要正确的 mailto 格式,例如mailto://tes@test.com(正如 OhadM 在 OP 的 cmets 中提到的)

【讨论】:

  • 感谢到目前为止的帮助,我找到了您发布的 GitHub 示例,但我不知道如何、在哪里以及如何使用它
  • @ChrisNeumaier 您必须在使用 WebKit 的 ViewController 中使用它。开始在您的课程中输入它,Xcode 将帮助您编写代码框架。该方法已经作为 WebKit 的一部分存在 - 就像 viewDidLoad 是 UIKit 的一部分。 decisionPolicyForNavigationAction 可以帮助您决定如何处理 URL
  • 我用我的 ViewController 更新了我的原始帖子,我使用了你建议的功能,但我无法让它正常工作
  • @ChrisNeumaier 您至少应该将您的实现放在您发布的代码中。如果没有该功能,您将无法正常工作,如果您不向我们展示,我看不出您做错了什么
  • @ChrisNeumaier 很高兴你明白了 - 我在你的帖子下方看到了你的其他评论。我将使用格式提示更新我的答案(以防有人偶然发现)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 2023-02-17
  • 2014-12-24
相关资源
最近更新 更多