WKWebView与Web JS简单交互与解耦
2020-05-22 本文已影响0人
livesxu
OC调用JS
- (void)evaluateJavaScript:(NSString*)javaScriptString completionHandler:(void(^_Nullable)(_Nullableid,NSError*_Nullableerror))completionHandler;
示例:

JS调用OC(我称之为JS事件截取)
1.添加事件监听- (void)addScriptMessageHandler:(id)scriptMessageHandler name:(NSString *)name;
name就是你要截取的事件名
2.要实现一个delegate WKScriptMessageHandler
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message;
3.需要移除监听- (void)removeScriptMessageHandlerForName:(NSString *)name;



跟KVO相像,但是这个比KVO坑。
!!!注意!!!
在dealloc一般是移除不了的,因为self持有webview,webview持有configuration.userContentController,userContentController强引用self。所以需要使用NSProxy解耦。
详见:demo