Ben*_*man 52 iphone xcode objective-c uiwebview ios
我有一些代码需要在UIWebView完成加载文档后运行.为此,我已将UIWebView委托设置为我的控制器,并实现了该webViewDidFinishLoading方法.
这会被多次调用,具体取决于要加载的页面类型.我不确定是不是因为ajax请求,图像请求,甚至是iframe.
有没有办法告诉主要请求已经完成,这意味着HTML已完全加载?
或者可能会延迟我的代码触发,直到所有这些事件都完成了?
小智 50
你可以做这样的事情来检查加载完成的时间.因为您可以在同一页面上拥有大量内容,所以您需要它.
- (void)webViewDidFinishLoad:(UIWebView *)webview {
if (webview.isLoading)
return;
// do some work
}
Run Code Online (Sandbox Code Playgroud)
wkw*_*wkw 48
它可能是启发(如果你还没有走这么远)NSLog一段负载开始和完成.
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"Loading: %@", [request URL]);
return YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSLog(@"didFinish: %@; stillLoading: %@", [[webView request]URL],
(webView.loading?@"YES":@"NO"));
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
NSLog(@"didFail: %@; stillLoading: %@", [[webView request]URL],
(webView.loading?@"YES":@"NO"));
}
Run Code Online (Sandbox Code Playgroud)
我只是在我的一个项目中观看了对所有三个的调用,这个项目从我的包中加载了一个帮助页面并包含嵌入的资源(外部css,YUI!,图像).唯一的请求是初始页面加载,shouldStartLoadWithRequest不会为任何依赖项调用.所以很奇怪为什么你的didFinishLoad被多次调用.
也许您所看到的是由于重定向,或者如所提到的,在加载页面中的ajax调用.但是你至少应该能够平衡shouldStartLoad对其他两个委托函数的调用,并能够确定加载何时完成.
Vin*_*ngh 12
检查一下这么简单易行,无需编写太多代码:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
if ([[webView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]) {
// UIWebView object has fully loaded.
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题已经解决了,但我看到它缺少一个答案,实际上解释了为什么多次调用webViewDidFinishLoad实际上是预期的行为
每次webview完成加载帧时都会调用上述方法.从UIWebViewDelegate协议文档:
webViewDidFinishLoad:
在Web视图完成加载框架后发送.
实际上,对于构成该UIWebViewDelegate协议的所有其他方法也是如此.
试试这个它会工作正常
-(void)webViewDidFinishLoad:(UIWebView *)webview
{
if (webview.isLoading)
return;
else
{
// Use the code here which ever you need to run after webview loaded
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36954 次 |
| 最近记录: |