3

私はGCDを使用してUIWebViewでjavascriptを実行します。通常のjavasciptの場合、すべてが検出されたように見えますが、「アラート」に関しては、ポップアップモーダルビューによってユーザーインターフェイスが応答しなくなります。

これがUIWebViewDelegateメソッドの私のコードです。

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{

    NSLog(@"RECEIVED");
    BOOL re =[WebParserStrategy shouldConsiderAsRequest:request];
    NSLog(@"--receive Request: %@ jumpTo:%@", request.URL.absoluteString, re == YES ? @"YES" : @"NO!!");
    if(re == NO)
    {
        dispatch_async(parserRequestToMessageQueue, ^{

            NSString *msg;
            NSDictionary *param;
            [WebParserStrategy transferRequest:request toMessage:&msg withParam:&param];
            WebObserverChain *chain = [self.messageObservers objectForKey:msg];
            if(chain == nil)
                ;//NSLog(@"!!!unknow message:%@ not found in message list", msg);
            else {
                dispatch_async(dispatch_get_main_queue(), ^{

                     [self.webView stringByEvaluatingJavaScriptFromString:@"alert('')"];          
                });
            }
        });
}
return re;}
4

1 に答える 1

1

これは、Web アラートが同期/ブロックであり、アプリケーション全体のメイン キューでこれを行っているためです。UIAlertView を使用するか、アラートで達成しようとしていることに対する他の解決策を見つけてください。

UIWebView の Objective-C 提供の JavaScript の実行における同時実行性をまったく制御できないため、実行が非常に高速ではない呼び出しを行うことは避ける必要があります。そうしないと、アプリのメイン スレッド全体が、最も信頼性の低いことで有名な UIKit クラスの 1 つに翻弄されてしまいます。

于 2012-08-03T23:25:16.063 に答える