簡體   English   中英

使用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委托只能看到其中一個,而忽略另一個。

我嘗試使用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];
}

有關回調模式的更多信息,請參見: UIWebView回調C / Objective-C中的Javascript

我知道這很復雜,但這是一個解決方案……祝您好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM