最近接手了一个老项目,里面的html页面非常多原生和js交互用的也很多全都是用UIWebView显示的,苹果要求20年12月底前项目中不能再使用UIWebView所以急需马上整改,主要需要改的就是变更原生和h5js的交互方法,我们都知道UIWebView和WK与js交互的代码是不一样的,UIWebView只要原生和h5约定好方法名就可以被调起,但是WK需要在js中如下代码所示才能实现被js调起
window.webkit.messageHandlers.test.postMessage(1);
为了能够在不改动h5页面情况下,js能调起WK原生,我这边做了一下js注入,代码如下
NSString *jsStr = @"test = function(a){return window.webkit.messageHandlers.test.postMessage(a);}"; WKUserScript *jsScript = [[WKUserScript alloc] initWithSource:jsStr injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
WKWebViewConfiguration *wkWebViewConfiguration=[[WKWebViewConfiguration alloc] init];
[wkWebViewConfiguration.userContentController addUserScript:jsScript];
这样就可以让js成功调起原生方法了