Ios 检测每次WKWebView完成加载的时间
我有一个在iPad上的iOS8上运行的WKWebView应用程序(标准的iPad用户代理:“Mozilla/5.0(iPad;CPU OS 8_1_1,类似Mac OS X)AppleWebKit/600.1.4(KHTML,类似Gecko)版本/8.0 Mobile/12B436 Safari/600.1.4”)。我尝试了我能想到的所有代理和侦听器,每次都尝试检测页面何时完成加载。问题是:Ios 检测每次WKWebView完成加载的时间,ios,swift,wkwebview,Ios,Swift,Wkwebview,我有一个在iPad上的iOS8上运行的WKWebView应用程序(标准的iPad用户代理:“Mozilla/5.0(iPad;CPU OS 8_1_1,类似Mac OS X)AppleWebKit/600.1.4(KHTML,类似Gecko)版本/8.0 Mobile/12B436 Safari/600.1.4”)。我尝试了我能想到的所有代理和侦听器,每次都尝试检测页面何时完成加载。问题是: 打开您的WKWebView并转到Google。以下称为: _decidePolicyForNavigat
_decidePolicyForNavigationAction
_didStartProvisionalNavigation
_ didFinishNavigation
_didStartProvisionalNavigation
_decidePolicyForNavigationAction
_ didFinishNavigation
_decidePolicyForNavigationAction
_didStartProvisionalNavigation
_ didFinishNavigation
_didStartProvisionalNavigation
_decidePolicyForNavigationAction
_ didFinishNavigation
- 使用NSURL协议或类似协议李>
- 或者是一种检测何时 webView.backForwardList.currentItem是否已更新
感谢您的帮助。我不确定加载页面后您到底想做什么,但希望观察这些属性可以帮助您:
webView.addObserver(self, forKeyPath: "estimatedProgress", options: .New, context: nil)
webView.addObserver(self, forKeyPath: "loading", options: .New, context: nil)
webView.addObserver(self, forKeyPath: "title", options: .New, context: nil)
webView.addObserver(self, forKeyPath: "canGoBack", options: .New, context: nil)
webView.addObserver(self, forKeyPath: "canGoForward", options: .New, context: nil)
如果有人在寻找如何使用观察者的解决方案,以下是解决方案:
webView.addObserver(self, forKeyPath: "title", options: .new, context: nil);
webView.addObserver(self, forKeyPath: "loading", options: .new, context: nil);
webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil);
然后使用observeValue
功能并编写一个开关盒,或者如果需要,则查找键路径
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "title" {
print(change ?? "No title")
if change != nil, let currentTitle = change?[.newKey] as? String {
titleLabel.text = currentTitle
}
} else if keyPath == "loading" {
print("Loading")
reloadButton.setImage(#imageLiteral(resourceName: "cancel.png"), for: .normal)
} else if keyPath == "estimatedProgress" {
print(wkWebView.estimatedProgress);
progressView.progress = Float(wkWebView.estimatedProgress)
}
}
我创建了一个演示项目,以探索有关WebKit WebView的更多信息。签出我使用WebView.scrollView.contentSize属性来检查高度,如果高度为零,则我会在设置之前稍微延迟调用相应的函数。谢谢,但我并不想检测WKWebView何时出现在屏幕上——我希望WKWebView在只使用Java的网站(YouTube mobile、Vimeo mobile等)开始和结束在iPhone上加载其网站内的点击时通知我。一旦YouTube加载到iPhone上,WKWebView就不会调用任何东西。。。您可以继续浏览站点,并且不会调用任何委托方法。web视图的问题是,对于您无法控制的站点(因此可以在其中插入特定的事件挂钩),一旦您开始尝试一般性地确定“完成加载”的概念,就很难定义它。在页面中加载和运行Javascript,就像现代复杂网站的典型情况一样,可以通过非页面请求下拉内容,然后在原始HTML及其资源完全下载并构建DOM后填充页面。这就是你在YT和Vimeo中看到的。从技术上讲,该页面在任何地方都无法导航。swift中的现成解决方案:这是唯一对我有效的方法——对estimatedProgress作出反应。有时也会调用jquery ready,即使wkwebview进度不是1,文档显然仍在加载中。是否有基于上述观察者触发方法的演示代码?非常感谢;这对我帮助很大!但为了完全可靠,我必须在观察到的关键路径列表中添加“URL”!