目标:网站加载完成后对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/