美文网首页
iOS webView和js交互如何实现和安卓一样的调用方式

iOS webView和js交互如何实现和安卓一样的调用方式

作者: 丶Honour | 来源:发表于2018-09-25 15:08 被阅读0次

    废话不多说了,直接讲主题...
    webView和js交互,iOS调用webView调用非常简单,在这先不说了.
    因为UIWebView和WKWebView的不同,WKWebView html渲染和js不在同一个进程,所以WKWebView不能捕获到当前的jsContext,而UIWebView可以,UIWebView与js交互可通过JSBridge来实现,方法还比较简单.
    在这里主要讲的是WKWebView加载的webView调用iOS的方法:

     config.userContentController = [WKUserContentController new];
    [config.userContentController addScriptMessageHandler:self name:@"senderModel"];
    

    众所周知的方式,但是js端调用iOS方法,window.webkit.messageHandlers.senderModel.postMessage({body: 'Alert'}); 比较麻烦,同时和安卓端调用方式不统一,js端工作量可能稍微大一些,需要加判断.

    在这里我给提出的解决方式是注入js使window.senderModel = window.webkit.messageHandlers.senderModel;
    这样js端调用window.senderModel.postMessage(信息); 安卓同样注册一个"senderModel"的对象,写一个方法postMessage的方法,这样就能完成统一.
    代码如下,请参考:

     WKUserScript *userScript = [[WKUserScript alloc] initWithSource:@"if (typeof window.webkit != 'undefined' && typeof window.webkit.messageHandlers.senderModel != 'undefined') { window.senderModel = window.webkit.messageHandlers.senderModel;}" injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];
    [_webView.configuration.userContentController addUserScript:userScript];
    

    因为WKWebView的不同,只能调用postMessage,方法,这时候就苦逼了,如果多个方法呢.安卓小朋友可能问你了,毕竟人家是为了你妥协.😝, 同样我们也是有方法的,😝
    window.senderModel.postMessage({method:'method1',parameter:['','']});
    让js端传这样的形式. method传要执行的方法,,parameter这个里面放参数列表tuple.
    这时候安卓又可能又问题,这种形式可能他们没法解析,这时候了解到他们只能解析json串和字符串,OMG,好吧,改之.
    window.senderModel.postMessage({"method":"method1","parameter":["",""]});
    这样对于iOS是没有任何影响的.
    写完了,大体写了写,喜欢的,或者用的到的可以点个小心心哦💗💕
    😝

    相关文章

      网友评论

          本文标题:iOS webView和js交互如何实现和安卓一样的调用方式

          本文链接:https://www.haomeiwen.com/subject/nqhloftx.html