iOSWKWebView与HTML5的交互《二》设计方案与架构

上一篇已经讲解了WKWebView与前端交互的基本使用,本文主要讲解自己设计方案,如何做到

  • 耦合性
  • 增加代码的复用率
  • 减少重复代码
  • 易维护
  • 可扩展性强

demo下载地址
GitHub下载地址
首先思考一个问题:
一个项目中必定有很多URL请求如何如何在,每个页面必定有很多与客户端交互的是否每一次都要写一遍API当JS调用OC的时候
是否每次都要写一遍需要将被js调用的方法注册进去在代理中判断是否是那个函数?????



这个设计方案用了handle的注册的方式来进行管理,用了MVC和面向协议编程,无论增加多少JS把底层封装的WKWebView不要动,当有新的功能的时候,我们只需要新写一个codeHandle,然后注册一下,这样更加维护,可扩展性强,减少代码的复用


一:整体架构采用了MVC和工厂模式的面向协议
二:handle管理
2.1handle注册

注册 在ZMMWebAllCodeHandle 里面+ (void)registerCodeHandle:(nonnull Class)codeHandle
目的 当WLScriptMessageHandler执行代理的时候通过前端的函数《message.name》可以找到客户端约定的《message.name》在那个codeHandle的类里面,然后在对应的执行当前的codeHandle类的方法

1.2handle查询

原理:
遍历所有的 codeHandle 通过 runtime 的执行类的方法( class_getClassMethod 执行
每一个 handel[codeClass handleCodes];找到 每一个 handle 的所有 eventCode 去进
行对比 ,只要发现是这个eventCode 就确定是这个 Handle。

第一步:当拦截到 和message.name 的时候 执行(findRegisterCodehandle:)
第二步:开始在ZMMWebJspShareData 单例里面遍历所有的CodeHandle
通过每一个codeHandle 里面类方法+ (NSArray *)handleCodes 找每一个eventCode ,直到找到
当前的eventCode ,返回当前的 currentCodeHandle。

1.3 回调前端页面

-(void)callBackToJsp:(NSString*)json;

1.4 基类handle的功能接口(ZMMWebCodeBaseHandleInterface)

-(void)callBackToJsp:(NSString*)json 数据回传jsp页面
+(NSArray*)handleCodes 处理code集合
-(NSArray*)setHandleCodesArray 需要设置的code处理集合
-(void)handleWebMessageName:(NSString*)name messageBody:(NSString*)bod- 用于浏览器监测调用code处理-
- (UIViewController *)getCodeWebViewController 获得getCodeWebViewController

三.前端调用

var bankCards=["中国工商银行","中国农业银行","平安银行","建设银行","邮政银行"];
	var sendStrs = {
		"callback":"selectBankResult",
		"title":"选择银行卡",
		"cards":bankCards
	};
	var str = JSON.stringify(sendStrs)
	  window.webkit.messageHandlers.selectBank.postMessage(str);  

四.新功能接入
步骤:
第一步:创建一个继承于ZMMWebCodeBaseHandle的类
第二步:CMBCWebAllCodeHandle类里面注册新建的的Handle
eg:[ZMMWebViewConfig registerCodeHandle::[新创建的handle class]];
第三步:实现ZMMWebCodeBaseHandle必须要实现的方法
1)-(NSArray*)setHandleCodesArray
2)+(NSArray*)handleCodes
3) -(void)handleWebMessageName:(NSString*)name
messageBody:(NSString*)body
第四步:数据回传jsp页面
1)callBackToJsp:

发布了128 篇原创文章 · 获赞 106 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/Z1591090/article/details/89479993
今日推荐