我使用标准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");
}
答案 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
}