У меня возникли проблемы с вызовом функции 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 (сеанс) не работает. Перехват изменения местоположения никогда не происходит, и поэтому другое устройство не продвигается вперед с процессом.
Любые идеи о том, почему этот последний запрос не отправляется на страницу, или что ломается? Спасибо.
Что вы имеете в виду, когда говорите «Шаг 6: генерируется уведомление и отправляется на другое устройство, которое содержит идентификатор сессии выше, а другое устройство получает уведомление, а выполняемая функция:«. Как вы отправляете уведомление на другое устройство? –
Через APNS. Я говорю серверу отправлять уведомление, а другое устройство получает уведомление с полезной нагрузкой, содержащей идентификатор сеанса. – Bassel