我在从 UIWebView 调用 javascript 函数时遇到了一些问题。
这是我的工作流程:
第 1 步:在 UIWebView 中加载网页
第 2 步:用户单击网页中的按钮,从而启动对应用程序功能的调用 -
window.location=("native-function-call:getSessionID:"+session);
第三步:位置变化被app函数拦截,并在app中设置sessionID——
-(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;
}
第四步:设置好sessionID后,调用javascript——generateToken(session)
第5步:在javascript函数中,generateToken,再次调用上面的函数,因此-
window.location="native-function-call:getTokenID:"+token;
第 6 步:根据上面的代码,将在 javascript 中创建的 tokenID 传递给应用程序。然后应用程序继续调用另一个函数,称为 sendRequest(session)。
第6步:生成一个通知并发送到另一个设备,其中包含上面的sessionID。另一台设备收到通知,执行的功能是:
-(void) requestReceived:(NSNotification *) pushNotification
{
NSDictionary *notification = [pushNotification userInfo];
sessionID = [notification objectForKey:@"session"];
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"%@%@%@", @"generateToken(\"",sessionID,@"\")"]];
}
第 7 步:这是正在中断的步骤。根据上面的代码,我正在设置调试点,最后一个通知功能正在另一台设备上输入。但是,对 generateToken(session) 的 javascript 调用不起作用。位置更改的拦截永远不会发生,因此其他设备不会继续进行该过程。
关于为什么最后一个请求没有被发送到页面的任何想法,或者什么是破坏?谢谢你。