2013-09-27 42 views
2

我通過UIWebViewDelegate捕獲javascript調用。使用Objective-c捕獲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委託只能看到其中一個,而忽略另一個。

我試圖用NSOperationQueueNSURLConnection sendAsynchronousRequest但沒有任何成功。

我怎樣才能爲每個異步JS請求調用shouldStartLoadWithRequest委託?

感謝您的幫助..要去了解這將是爲您的視圖的唯一標識符

回答

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]; 
} 

有關回調格局鐵道部信息見: Javascript in UIWebView callback to C/Objective-C

我知道這是複雜的,但它是一個解決方案... 祝你好運!