DHWKWebviewJavascriptAdapter 仿JS

2020-11-11  本文已影响0人  Daniel_King

DHWKWebviewJavascriptAdapter

仿照JSContext的处理方式,适用于WKWebview的JS中间件处理

优点:

集成方式

pod 'DHWKWebviewJavascriptAdapter'

使用方法

  1. 创建继承 DHJavascriptExport 的协议再创建中间件并遵循该协议

    #import "DHWKWebviewJavascriptAdapter.h"
    @protocol DHMiddlewareExport <DHJavascriptExport>
    /// js对应方法名为methodName
    - (void)methodName:(id)param;
    @end
      
    @interface DHMiddleware : NSObject <DHMiddlewareExport>
    @end
    @implementation DHMiddleware
    + (DHJavascriptBridgeType)dh_javascriptBridgeType { 
      return DHJavascriptBridgeType_AllNeed; 
    }
    - (void)methodName:(id)param {...} 
    @end
    
  1. 使用-dh_registerMiddleware:注册中间件对象

    // 不一定要写在-webView:didFinishNavigation:内
    [webView.configuration.userContentController dh_registerMiddleware:[[DHMiddleware alloc] init]];
    
  1. 设置webView.navigationDelegate且实现-webView:didFinishNavigation:

应用场景

> 适用于javascript与iOS的交互场景

> js
// 正常与iOS发送信息的方式
window.webkit.messageHandlers.jsMethodName.postMessage("");

> oc
// DHMiddleware.m
+ (DHJavascriptBridgeType)dh_javascriptBridgeType { 
  return DHJavascriptBridgeType_AllNotNeed; 
}
// 以下两个方法都可作为响应
// 请勿同时定义在协议内!一旦都注册,将随机一直响应其中一个方法(基于遍历协议方法列表的先后顺序)
- (void)jsMethodName:(id)param {...} 
- (void)jsMethodName {...}

#################################
#################################

> js
// 定义中间件发送信息的方法
window.dh_identifity.jsMethodNameWithP1P2P3("p1", "p2", "p3");

> oc
// DHMiddleware.m
+ (NSString *)dh_javascriptIdentifier {
   return @"dh_identifity";
}
+ (DHJavascriptBridgeType)dh_javascriptBridgeType { 
  return DHJavascriptBridgeType_AllNeed; 
}
// 以下四个方法都可作为响应
// 请勿同时定义在协议内!一旦都注册,将随机一直响应其中一个方法(基于遍历协议方法列表的先后顺序)
// js传递过来将作为数组参数接收
- (void)jsMethodNameWithP1P2P3:(id)params {...}
// 参数将依次接收
- (void)jsMethodNameWithP1:(id)p1 p2:(id)p2 p3:(id)p3;
// js传递过来的参数将抛弃p3参数
- (void)jsMethodNameWithP1:(id)p1 p2P3:(id)p2  {...}
// js传递过来的参数将抛弃p3参数
- (void)jsMethodNameWithP1P2:(id)p1 p3:(id)p2  {...}

处理机制

已知问题

Github DHWKWebviewJavascriptAdapter

上一篇 下一篇

猜你喜欢

热点阅读