使用 Objective-c 捕获 JavaScript 异步调用
Catching JavaScript asynchronous calls with Objective-c
我用UIWebViewDelegate
接javascript
电话。
它看起来像:
- (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 委托只能看到其中一个并忽略另一个。
我试图使用NSOperationQueue
和NSURLConnection 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
我知道这很复杂,但这是一个解决方案...祝你好运!
相关文章:
- 如何使用异步调用更改工厂的变量
- 使变量可用于不带闭包的异步调用
- 需要收集Javascript nodejs异步调用
- 如何使用jQuery等待来自回调的异步调用
- 使用模态库从嵌套的异步调用中生成javascript同步代码
- 在forEach内部进行异步调用
- jQuery没有指定异步调用级别async:false
- SPA异步调用在IE 11中不起作用
- Ember.js-模型find()方法中的异步调用
- Javascript/JQuery处理并发/异步调用和数据竞争
- 在异步调用返回之前隐藏页面
- ExtJs 处理异步调用
- ES6:在异步调用中使用生成器
- Angular js - 异步调用 $scope.users 后不更新模态值
- 在每个循环上完成异步调用,然后转到下一个节点 js
- 从异步调用返回数组,然后为数组的每个元素返回其他异步调用
- 使用 AngularJS 的异步调用
- 循环内部的Javascript异步调用
- 使用Canvas和ForEach处理异步调用
- JavaScript/promise,对sharepoint的多个异步调用