告诉 stringByEvaluatingJavaScriptFromString: 何时完成

Tell when stringByEvaluatingJavaScriptFromString: has completed

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

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

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

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

-(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

}