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

Catching JavaScript asynchronous calls with Objective-c

本文关键字:异步 调用 JavaScript 捕获 Objective-c 使用      更新时间:2023-09-26

我用UIWebViewDelegatejavascript电话。

它看起来像:

- (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但没有任何成功。

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

感谢您的任何帮助..

一种方法是为视图生成唯一标识符。
然后,将其存储在包含对视图的引用的字典中。 然后,您的视图可以通过导航到 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 信息,请参阅:UIWebView 回调 C/Objective-C 中的 Javascript

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