2013-09-27 1 views
2

Я поймаю javascript звонки с UIWebViewDelegate.Ловкие асинхронные вызовы JavaScript с Objective-c

Это выглядит следующим образом:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{  
NSDictionary *dictionary = [[[JSBridgeController alloc] init] js:request]; 
if (dictionary) { 
    if ([dictionary[@"methodName"] isEqualToString:@"gimmeUser"]) { 
     [self.delegate gimmeUserJS: dictionary]; 
    } 
    if ([ dictionary[@"methodName"] isEqualToString:@"initMe"]) { 
     [self.delegate initMeJS: dictionary]; 
    } 
} 
return YES;} 

Проблема находится на веб стороне для меня. Он имеет десятки таких JS запросов, как в приведенном выше коде, и отправлять их асинхронно. Поэтому, если я получаю два запроса одновременно, делегат webview может видеть только один из них и игнорировать другой.

Я попытался использовать NSOperationQueue и NSURLConnection sendAsynchronousRequest, но безуспешно.

Как я могу вызвать shouldStartLoadWithRequest делегат для каждого асинхронного запроса JS?

Спасибо за любую помощь ..

ответ

0

Один из способов идти об этом будет генерировать уникальный идентификатор для вашего зрения.
Затем сохраните его в словаре со ссылками на ваши взгляды. Затем ваши представления могут передать идентификатор обратно, перейдя к «обратный вызов: обратный вызов? Id =» + your_passed_id в вашем JS.

if ([[[inRequest URL] scheme] isEqualToString:@"callback"]) { 
    //then use the query string and parse for id 
    //in order to have individual control over callbacks 
    NSString *queryString = [[inRequest URL] query]; 
} 

для мор Информация о шаблоне обратного вызова см: Javascript in UIWebView callback to C/Objective-C

Я знаю, что это сложно, но это решение ... Удачи!