【问题标题】:webViewDidFinishLoad in WKWebViewWKWebView 中的 webViewDidFinishLoad
【发布时间】:2017-04-06 09:52:23
【问题描述】:

我必须从 UIWebView 迁移到 WKWebView,但我遇到了一些麻烦。看起来“WKWebView”没有成员“请求”。有没有办法使用 WKWebView 来处理这种情况?我只需要加载 URL,然后如果它包含“.pdf”,只需显示一个按钮。

func webViewDidFinishLoad(_ webView : WKWebView) {
    UIApplication.shared.isNetworkActivityIndicatorVisible = false

    if (webView.request?.url!.absoluteString)!.range(of: ".pdf") != nil {
        pdfBackButton.isHidden = false
    }
    else {
    pdfBackButton.isHidden = true}

}

【问题讨论】:

标签: ios swift webview uiwebview wkwebview


【解决方案1】:

你可以实现WKNavigationDelegatewebView(_:didFinish:)函数。

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    UIApplication.shared.isNetworkActivityIndicatorVisible = false
    let url = webView.url

    if url?.absoluteString.range(of: ".pdf") != nil {
        pdfBackButton.isHidden = false
    }
    else {
        pdfBackButton.isHidden = true
    }
}

【讨论】:

  • 感谢您的帮助,但不幸的是它不起作用...我在 url 声明后添加了一个简单的“print(url!)”,但当前加载的 url 从未在控制台中打印所以我猜这个方法永远不会被调用......对此有什么想法吗?
  • 你设置了 WKWebView 代理吗?
  • @toddg 我想我实际上对此有问题。当我在“viewDidLoad”方法中设置“webView.navigationDelegate = self”时,我的应用程序在启动时崩溃......
  • stackoverflow.com/questions/40784033/… 我已经创建了关于代表的另一个问题:)
【解决方案2】:

"WebKit" 框架添加到您的课程中。

override func viewDidLoad() {
     super.viewDidLoad()
     let myWebView:WKWebView = WKWebView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
     myWebView.navigationDelegate = self;
     let url = URL(string: "https://www.Apple.com")!
     myWebView.load(URLRequest(url: url))
     self.view.addSubview(myWebView)
}

然后实现WKNavigationDelegate方法

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    UIApplication.shared.isNetworkActivityIndicatorVisible = false
    let url = webView.url
    print(url as Any) // this will print url address as option field
    if url?.absoluteString.range(of: ".pdf") != nil {
         pdfBackButton.isHidden = false
         print("PDF contain")
    }
    else {
         pdfBackButton.isHidden = true
         print("No PDF Contain")        
    } 
}

希望对您有所帮助!

【讨论】:

  • 如果我把这行"myWebView.navigationDelegate = self;"应用程序在启动时立即崩溃。我已经读过它不可能再与 WKWebView 一起使用了......这可能是问题吗?如果我在没有该行的情况下使用您的代码,我可以运行它,但我会遇到同样的问题:函数 didFinish 看起来从未被调用过。事实上,我没有看到加载的 URL ......
  • 我已经尝试过了,它工作正常..!看起来你错过了什么..
  • 向我发送崩溃报告或日志,以便我分析它帮助您解决问题...!!
  • @ernestocattaneo 我遇到了同样的问题,但解决了。我使用情节提要插入了 UIView 并忘记将其删除并重新插入 WKWebView 。一旦我这样做了,上面的代码就像一个冠军。
猜你喜欢
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
相关资源
最近更新 更多