目标:在网站加载完成后截取WKWebView的截图
采用的方法:
创建了一个名为screen capture()的扩展方法,它获取了WKWebView的图像
使我的UIViewController实现WKNavigationDelegate
设置wkwebview.navigationDelegate = self(在UIViewController init中)
在UIViewcontroller中实现didFinishNavigation委托func,为WKWebView调用屏幕捕获扩展方法
Run Code Online (Sandbox Code Playgroud)func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) { let img = webView.screenCapture() }
问题:
我在这里错过了什么?我查看了WKWebView的所有可能的委托函数,没有其他任何东西似乎代表WKWebView中内容加载的完成.如果有解决方法,将不胜感激
更新:添加我用于截取Web视图截屏的截图代码
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
}
Run Code Online (Sandbox Code Playgroud) 在我的控制器中,我调用了WKWebViewInstance.loadRequest(url).如果没有可用的Internet,我想在WKWebView中加载错误消息.
我发现了
func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError)
Run Code Online (Sandbox Code Playgroud)
当WKWEbView导航失败而没有互联网连接时被调用.当我在上面的委托方法中进行webView.loadHtmlString()调用时,没有任何反应.
如何在发出WKWEbView导航请求时检测到网络连接不存在,并将固定错误消息加载到Web视图中?
我的委托方法代码是
func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError) {
webView.stopLoading()
webView.loadHTMLString(Constants.OfflineHtmlString!,baseURL: nil)
}
Run Code Online (Sandbox Code Playgroud) 我在使用 WkWebview 的 WebViewController 中有以下实现,以便使用 WKWebView 的 WKUIDelegate 方法显示 javascript 警报
func webView(webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: () -> Void) {
if let host = self.webkitWebView?.URL?.host {
let alertController = UIAlertController(title: host, message: message, preferredStyle: .Alert)
alertController.addAction(UIAlertAction(title: NSLocalizedString("close"), style: UIAlertActionStyle.Cancel, handler: { (action: UIAlertAction!) in
completionHandler()
}))
self.presentViewController(alertController, animated: true, completion: nil)
}
}
func webView(webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: (Bool) -> Void) {
if let host = self.webkitWebView?.URL?.host {
let alertController …Run Code Online (Sandbox Code Playgroud)