2013-10-14 5 views
0

Я публикую это сообщение, потому что я не нашел ответа.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 
+0

Можете ли вы поделиться своим кодом? – Popeye

+0

Вы реализовали 'UIWebviewDelegate' в вашем файле' .h'? –

+1

@AkshitZaveri, если бы он не реализовал 'UIWebviewDelegate', он никогда не назовет' webviewDidStartLoad' и 'shouldStartLoadWithRequest:' вообще. Таким образом, это должно быть реализовано, если в конце концов это будет сделано для этих методов. – Popeye

ответ

0

по-видимому, WebView в ИО проверок специально для тегов «IFrame» в йот HTML, и в случае, если он находит, что создает события на основе этого тега, а также. Таким образом, простые однако пятнистое решение будет добавить следующий код в части йот, который меняется (например, в самом шаблоне каждой секции):

<iframe></iframe> 

сделал трюк для меня .. Я также использую angularjs version 1.3.16

Смежные вопросы