告诉stringByEvaluatingJavaScriptFromString:何时完成

时间:2015-05-22 15:22:36

标签: javascript ios objective-c uiwebview

我使用标准UIWebView并且需要知道stringByEvaluatingJavaScriptFromString:何时完成。我知道WKWebView有一个完成处理程序,但我需要使用我给出的当前UIWebView。由于该方法需要在主线程上运行,因此GCD没有多大帮助。有什么建议?

-(void)insertValue:(NSString*)value inWebView:(UIWebView*)webView{
    NSString *jsString = [NSString stringWithFormat:kConstantJSString, value];
    [webView stringByEvaluatingJavaScriptFromString: jsString];
    NSLog("THIS SHOULD LOG WHEN JS HAS EXECUTED");
}

1 个答案:

答案 0 :(得分:0)

好的,所以我想出了一个很好的方法来做到这一点。 在您的javascript调用中,添加此行添加到脚本的末尾:

window.location = 'js-ObjC:jsCompleted';

然后使用UIWebView的shouldStartLoadWithRequest:方法来捕获和测试这个新的窗口位置。然后,我在新窗口位置调用了第二个组件名称的选择器。

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
 if ([[[request URL] absoluteString] hasPrefix:@"js-ObjC:"]) { //get location change
     NSArray *components = [[[request URL]absoluteString] componentsSeparatedByString:@":"];
     NSString *functionName = [components objectAtIndex:1];

     /* Calls selector for functionName, this way silences compiler warning */
     SEL selector = NSSelectorFromString(functionName);
     ((void (*)(id, SEL))[self methodForSelector:selector])(self, selector);

     return NO;
 }
return YES;

}

-(void)jsCompleted{
    //Do stuff after javascript has completed

}