如何hook WKWebView的-(void)evaluateJavaScript:completionHandler:方法

{

Method originalMethod = class_getInstanceMethod([NSClassFromString(@"WKWebView") class], @selector(evaluateJavaScript:completionHandler:));

Method swizzledMethod = class_getInstanceMethod([self class], @selector(evaluateJavaScript:completionHandlerS:));

method_exchangeImplementations(originalMethod, swizzledMethod);

}

- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandlerS:(void (^)(id _Nullable str7 , NSError * er7))completionHandler{

[self evaluateJavaScript:javaScriptString completionHandlerS:^(id _Nullable str, NSError *er) {

if (completionHandler != nil) {//判空一定不能省,会闪退的

NSLog(@"%@ 返回 %@ ",javaScriptString,str);

completionHandler(str,er);

}

}];

判断completionHandler是不是空,很重要。

这样就能全局的hook客户端调用前端的所有数据和返回数据。