0

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 呼び出しは機能していません。ロケーション変更のインターセプトは発生しないため、他のデバイスはプロセスを進めていません。

最後のリクエストがページに送信されない理由、または何が壊れているかについてのアイデアはありますか? ありがとうございました。

4

1 に答える 1

0

何が間違っていたのかを理解しました。window.location へのすべての呼び出しが混同され、一部は実行されませんでした。javascript を異なるサーバー側ファイルに分割し、同じ webview に対してすべての呼び出しを行うのではなく、それぞれを個別に呼び出すことで問題を解決しました。

于 2013-03-15T17:47:14.220 に答える