
提前致谢!
BTW:我正在使用Swift 2.0和iOS 9与Xcode 7(官方发布)
正如我刚才所做的那样,让我知道我尝试了什么,以及我如何理解它.我尝试了几件事,首先是WKUserScriptlet webVIEwUserScript = WKUserScript( source: "window.onload = function() { webkit.messageHandlers.status.postMessage(\(wkwebVIEw.hashValue)) }",injectionTime: WKUserScriptInjectionTime.AtdocumentEnd,forMainFrameOnly: true ) 在“status”命名空间.这理论上等待加载所有内容,然后调用WKScriptMessageHandler
func userContentController(userContentController: WKUserContentController,dIDReceiveScriptMessage message: WKScriptMessage){ } 通过注册时
wkwebVIEw.configuration.userContentController.addScriptMessageHandler(self,name: "status")
在哪里我认为一切都准备好了.有时工作,但并非总是如此.
和你一样,我也尝试过添加WKNavigationDelegate并使用
func webVIEw(webVIEw: WKWebVIEw,dIDFinishNavigation navigation: WKNavigation!) { } 再次,这不起作用.另外,为estimatedProgress值添加观察者
wkwebVIEw.addobserver(self,forKeyPath: "estimatedProgress",options: .New,context: nil)
然后尝试在其中制作屏幕截图
overrIDe func observeValueForKeyPath(keyPath: String?,ofObject: AnyObject?,change: [String : AnyObject]?,context: UnsafeMutablePointer<VoID>) { } 没用.
但是,有效的方法是定期检查webVIEw的内容大小.我在userContentController函数中执行了此 *** 作,该函数由WKUserScript调用 – 但您也可以在dIDFinishNavigation函数中执行此 *** 作,然后只需更改要再次调用的函数.这里的代码:
let _contentSize = webvIEw.scrollVIEw.contentSize;if (_contentSize.height == 0){ dispatch_after(createdispatchTime(0.01),dispatch_get_main_queue()) { self.userContentController(userContentController,dIDReceiveScriptMessage: message) } return} 这基本上检查contentSize height属性,如果它为零,它将每0.01秒再次调用该方法,直到设置该属性.以下是我用于创建屏幕截图的功能
var vIEw : UIVIEw!if self.useSnapShot { // Use the snapshot function vIEw = webVIEw.snapshotVIEwAfterScreenUpdates(true)} else { // Draw the vIEw as UIImage UIGraphicsBeginImageContextWithOptions(webVIEw.frame.size,false,0.0) webVIEw.drawVIEwHIErarchyInRect(webVIEw.frame,afterScreenUpdates: true) let snapshot = UIGraphicsGetimageFromCurrentimageContext() vIEw = UIImageVIEw(image: snapshot) vIEw.frame = webVIEw.frame} 我已经在设备和模拟器上测试了它,它的工作原理.
编辑
这里是创建调度时间的函数
private func createdispatchTime(seconds: Double) -> dispatch_time_t{ let delay = seconds * Double(NSEC_PER_SEC) return dispatch_time(disPATCH_TIME_Now,Int64(delay))} 编辑#2
我创造了一个要点,表明我相信的更好的方式
https://gist.github.com/christopherhelf/1640454bcace39a87c93#file-wkwebviewplus-swift
我替换了webvIEws UIScrollvIEw的setContentSize函数,并通知父类已经进行了更改.
总结以上是内存溢出为你收集整理的swift – 实际显示视图时的WKWebView通知全部内容,希望文章能够帮你解决swift – 实际显示视图时的WKWebView通知所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)