2013-03-14 3 views
0

У меня возникли проблемы с вызовом функции javascript из UIWebView.Вызов функций javascript из UIWebView

Вот мой рабочий процесс:

Шаг 1: WEB-страница загружается в UIWebView

Шаг 2: пользователь нажимает на кнопку в веб-страницу, которая инициирует вызов к функции приложения, таким образом, -

window.location=("native-function-call:getSessionID:"+session); 

Шаг 3: изменение местоположения перехвачено функцией приложения и задает идентификатор сеанса в приложении -

-(BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
NSString *requestString = [[request URL] absoluteString]; 

if([requestString hasPrefix:@"native-function-call:"]) 
{ 
    NSArray *components = [requestString componentsSeparatedByString:@":"]; 
    NSString *function = [components objectAtIndex:1]; 
    if([function isEqualToString:@"getSessionID"]) 
    { 
     sessionID = [components objectAtIndex:2]; 
     [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"%@%@%@", @"generateToken(\"",sessionID,@"\")"]]; 
    } 
    if ([function isEqualToString:@"getTokenID"]) 
    { 
     tokenID = [components objectAtIndex:2]; 

     //do stuff to connect to the session with the token 

     NSString *javaScriptRequest = [NSString stringWithFormat:@"%@%@%@", @"sendRequest(\"",sessionID,@"\")"]; 
     [webView stringByEvaluatingJavaScriptFromString:javaScriptRequest]; 
    } 
    return NO; 
} 
return YES; 
} 

Шаг 4: после того, как SESSIONID установлено, JavaScript называется - generateToken (сессия)

Шаг 5: в яваскрипта функции, generateToken, функция выше, вызывается снова, таким образом, -

window.location="native-function-call:getTokenID:"+token; 

Шаг 6: за код выше, tokenID, созданный в javascript, передается в приложение. Затем приложение переходит к вызову еще одной функции, называемой sendRequest (session).

Шаг 6: создается уведомление и отправляется на другое устройство, которое содержит идентификатор сессии выше. другое устройство получает уведомление, а выполняемая функция:

-(void) requestReceived:(NSNotification *) pushNotification 
{ 
NSDictionary *notification = [pushNotification userInfo]; 
sessionID = [notification objectForKey:@"session"]; 
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"%@%@%@", @"generateToken(\"",sessionID,@"\")"]]; 
} 

Шаг 7: Это шаг, который нарушает работу. за код выше, я устанавливаю точки отладки, и последняя функция уведомления вводится на другое устройство. Однако вызов javascript для generateToken (сеанс) не работает. Перехват изменения местоположения никогда не происходит, и поэтому другое устройство не продвигается вперед с процессом.

Любые идеи о том, почему этот последний запрос не отправляется на страницу, или что ломается? Спасибо.

+0

Что вы имеете в виду, когда говорите «Шаг 6: генерируется уведомление и отправляется на другое устройство, которое содержит идентификатор сессии выше, а другое устройство получает уведомление, а выполняемая функция:«. Как вы отправляете уведомление на другое устройство? –

+0

Через APNS. Я говорю серверу отправлять уведомление, а другое устройство получает уведомление с полезной нагрузкой, содержащей идентификатор сеанса. – Bassel

ответ

0

Выяснено, что случилось. Все вызовы window.location смешивались, а некоторые не выполнялись. Я решил проблему, разделив javascript на разные файлы на стороне сервера и вызывая каждый отдельно, вместо того, чтобы делать все вызовы в одном и том же веб-просмотре.

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