ios - 当调用 didFinishNavigation 时,WKWebView 没有完成加载 - WKWebView 中的 Bug?

标签 ios objective-c swift webview

目标:网站加载完成后对WKWebView进行截图

采用的方法:

  • 在 UIViewController 中定义了一个 WKWebView 变量
  • 创建了一个名为 screen capture() 的扩展方法,用于获取 WKWebView 的图像

  • 让我的 UIViewController 实现 WKNavigationDelegate

  • 设置 wkwebview.navigationDelegate = self(在 UIViewController 初始化中)

  • 在 UIViewcontroller 中实现了 didFinishNavigation 委托(delegate)函数来调用 WKWebView 的屏幕捕获扩展方法

func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
    let img = webView.screenCapture()
}

问题:

  • 当我调试模拟器时,我注意到即使网站尚未在 WKWebView 中呈现,控件也会到达 didFinishNavigation() 函数
  • 相应的图片截图是一个白色的 Blob 。

我在这里错过了什么?我查看了 WKWebView 的所有可能的委托(delegate)函数,似乎没有其他东西代表 WKWebView 中内容加载的完成。如果有解决方法,将不胜感激


更新:添加我用来截取网页 View 屏幕截图的代码

class func captureEntireUIWebViewImage(webView: WKWebView) -> UIImage? {

    var webViewFrame = webView.scrollView.frame
    if (webView.scrollView.contentSize != CGSize(width: 0,height: 0)){
    webView.scrollView.frame = CGRectMake(webViewFrame.origin.x, webViewFrame.origin.y, webView.scrollView.contentSize.width, webView.scrollView.contentSize.height)

    UIGraphicsBeginImageContextWithOptions(webView.scrollView.contentSize, webView.scrollView.opaque, 0)
    webView.scrollView.layer.renderInContext(UIGraphicsGetCurrentContext())
     var image:UIImage = UIGraphicsGetImageFromCurrentImageContext()
     UIGraphicsEndImageContext()

     webView.scrollView.frame = webViewFrame         
     return image
    }

    return nil
 }

最佳答案

对于那些仍在寻找答案的人来说,标记的答案是废话,他只是强行让答案被接受。

使用属性,

"loading"

webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!)

两者做同样的事情,表明是否加载了主要资源。

现在,这并不意味着整个网页/网站都已加载,因为它实际上取决于网站的实现。如果它需要加载脚本资源(图像、字体等)以使其可见,导航完成后您仍然什么也看不到,因为网络调用网站不被 webview 跟踪,只有导航被跟踪,所以它不会真正知道网站何时完全加载。

关于ios - 当调用 didFinishNavigation 时,WKWebView 没有完成加载 - WKWebView 中的 Bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30291534/

相关文章:

在 SpriteKit 中使用 Swift 的 IOS admob

ios - 从 Firebase 存储下载时出错

ios - 尝试针对游戏的特定部分拆分 iPhone 和 iPad 尺寸

ios - 如何在谷歌地图中点击标记

c++ - Objective-C 类实现 C++ 接口(interface)

ios - 访问 NSOperation 上的属性

swift - NSTableView 列之间的选项卡并移动到下一行

swift - Swift 上的+++ 和<<< 是什么?

ios - OAuth2 "social login"流程(允许通过 Facebook/Twitter 进行 OAuth2 身份验证): are there any examples/literature?

ios - 如何将自定义标签与标签栏项目标题对齐?