UIWebView から JavaScript 関数を呼び出すのに問題があります。
これが私のワークフローです:
ステップ 1: UIWebView での Web ページの読み込み
ステップ 2: ユーザーが Web ページのボタンをクリックすると、アプリ関数の呼び出しが開始されます。
window.location=("native-function-call:getSessionID:"+session);
ステップ 3: 場所の変更はアプリの機能によってインターセプトされ、アプリに 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;
}
ステップ 4: sessionID が設定された後、javascript が呼び出されます - generateToken(session)
ステップ 5: javascript 関数の generateToken で、上記の関数が再度呼び出されます。
window.location="native-function-call:getTokenID:"+token;
ステップ 6: 上記のコードに従って、javascript で作成された tokenID がアプリに渡されます。次に、アプリは sendRequest(session) という別の関数を呼び出します。
ステップ 6: 通知が生成され、上記のセッション ID を含む別のデバイスに送信されます。他のデバイスが通知を受け取り、実行する機能は次のとおりです。
-(void) requestReceived:(NSNotification *) pushNotification
{
NSDictionary *notification = [pushNotification userInfo];
sessionID = [notification objectForKey:@"session"];
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"%@%@%@", @"generateToken(\"",sessionID,@"\")"]];
}
ステップ 7: これは壊れているステップです。上記のコードに従って、デバッグ ポイントを設定しており、他のデバイスで最後の通知機能が開始されています。ただし、generateToken(session) への JavaScript 呼び出しは機能していません。ロケーション変更のインターセプトは発生しないため、他のデバイスはプロセスを進めていません。
最後のリクエストがページに送信されない理由、または何が壊れているかについてのアイデアはありますか? ありがとうございました。