使用Objective-c捕获JavaScript异步调用

时间:2013-09-27 10:50:16

标签: javascript ios objective-c uiwebview uiwebviewdelegate

我使用javascript抓住UIWebViewDelegate次来电。

看起来像:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{      
NSDictionary *dictionary = [[[JSBridgeController alloc] init] js:request];
if (dictionary) {
    if ([dictionary[@"methodName"] isEqualToString:@"gimmeUser"]) {
        [self.delegate gimmeUserJS: dictionary];
    }
    if ([ dictionary[@"methodName"] isEqualToString:@"initMe"]) {
        [self.delegate initMeJS: dictionary];
    }
}
return YES;}

问题在于网络方面对我而言。它有上述代码中的几十个JS请求,并将它们异步发送。因此,如果我同时收到两个请求,则webview委托只能看到其中一个,而忽略另一个。

我尝试使用NSOperationQueueNSURLConnection sendAsynchronousRequest,但没有成功。

如何为每个异步shouldStartLoadWithRequest请求调用JS委托?

感谢您的帮助..

1 个答案:

答案 0 :(得分:0)

实现此目的的一种方法是为您的视图生成唯一标识符 然后,将其存储在字典中,并引用您的视图。然后,您的视图可以通过导航到JS中的“callback:callback?id =”+ your_passed_id来传回标识符。

if ( [[[inRequest URL] scheme] isEqualToString:@"callback"] ) {
    //then use the query string and parse for id 
    //in order to have individual control over callbacks
    NSString *queryString = [[inRequest URL] query];
}

关于回调模式的mor信息,请参阅: Javascript in UIWebView callback to C/Objective-C

我知道这很复杂,但这是一个解决方案...... 祝你好运!