Я публикую это сообщение, потому что я не нашел ответа.UIWebView webViewDidStartLoad не называется
Я посылаю запрос в мой UIWebView
, webViewDidStartLoad
не вызывается. Мне нужно использовать метод reload, и тогда он будет работать. Кстати, shouldStartLoadWithRequest
вызывается тогда дважды.
Если я использую тестовый URL (например, Google), у меня не будет никаких проблем. Так что это не похоже на мой код.
Но здесь я называю уродливый сайт, который использует много угловых JS (и я не знаю, как это было сделано). Странно то, что он отлично работает на Safari.
Что я не понимаю, так это то, что он просто «застревает» в shouldStartLoadWithRequest
. Но после обратного вызова. Ничего не происходит, даже (didFailLoadWithError:
). Любая идея?
** * EDIT * ** * *
Ok я нашел проблему, но это по-прежнему странно связанный с этим вопрос. Я нашел решение, пытающееся отправить вам код, и я не мог поверить, что код действительно работает.
факт заключается в том, что я вызывал HTTP-запрос, пока мой веб-просмотр был скрыт, и я не знаю, почему второй звонок никогда не работает. Вы не можете воспроизвести «ошибку», так как веб-сайт изолирован песочницей, и я тестировал его в Google, и это работает.
Вам нужно знать, что сайт, на котором я тестировал, использует много угловых JS на основе состояния GUI. Если кто-то все еще может объяснить мне, как может uiwebview застрять с серверной стороны (webViewDidStartLoad никогда не звонил), я буду счастлив. Таким образом, ошибка связана с 100% сервером.
Вот код:
@interface ViewController()<UIWebViewDelegate>
@property(nonatomic, retain)UIWebView* webview;
@end
@implementation ViewController
@synthesize webview = _webview;
#pragma mark - UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType{
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView{
// With that ugly site it will be never called if _webview.hidden is set to true.
}
#pragma mark - lifeCycle
- (void)viewDidLoad{
[self setUpWebView];
// first time, it will work.
[self performSelector: @selector(loadUrlString:) withObject: @"http://theUglySite.com" afterDelay: 1];
// now, if the uiwebview is hidden, no response.
[self performSelector: @selector(loadUrlString:) withObject: @"http://theUglySite.com" afterDelay: 3];
[super viewDidLoad];
}
#pragma mark - logic
- (void)setUpWebView{
self.webview = [[[UIWebView alloc] initWithFrame:(CGRect){0,0,320,480}] autorelease];
_webview.delegate = self;
// hidding the webView will break the delegate callBack. That will still work on normal
// urlRequest.
_webview.hidden = YES;
[self.view addSubview: _webview];
}
- (void)loadUrlString:(NSString*)urlString{
NSURL* url = [NSURL URLWithString: urlString];
NSURLRequest* request = [NSURLRequest requestWithURL: url];
[_webview loadRequest: request];
}
@end
Можете ли вы поделиться своим кодом? – Popeye
Вы реализовали 'UIWebviewDelegate' в вашем файле' .h'? –
@AkshitZaveri, если бы он не реализовал 'UIWebviewDelegate', он никогда не назовет' webviewDidStartLoad' и 'shouldStartLoadWithRequest:' вообще. Таким образом, это должно быть реализовано, если в конце концов это будет сделано для этих методов. – Popeye