使用 JavaScriptCore.framework
#import <JavaScriptCore/JavaScriptCore.h>
- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
只能在主线程执行
- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler;
WKWebView 不支持通过如下的KVC的方式创建JSContext
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSString *textJS = @"showAlert('这里是JS中alert弹出的message')";
[context evaluateScript:textJS];
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
[context[@"payResult"] callWithArguments:@[@"支付弹窗"]];
// 获取webView上的js
JSContext *contest = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
contest[@"test"] = ^(){
NSLog(@"test按钮被点击了!!");
// 这里网页上的按钮被点击了, 客户端可以在这里拦截到,并进行操作
};
block中是在子线程,因此执行UI操作,控制台有警告,需要回到主线程再操作UI。