DHWKWebviewJavascriptAdapter 1.0.0

DHWKWebviewJavascriptAdapter 1.0.0

DanielHusx 维护。



  • DanielHusx

DHWKWebviewJavascriptAdapter

适用于 WKWebview 的 JS 中间件处理

优点:

  • 优雅地替换 UIWebview 的中间件
  • 简单易用,耦合性低

使用方法

  1. 创建继承自 DHJavascriptExport 的协议,再创建中间件并遵循该协议中间件。实现新协议方法,并根据需要,选择性实现 DHJavascriptExport 的类方法

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

    [webView.configuration.userContentController dh_registerMiddleware:[[DHMiddleware alloc] init]];
  3. 设置 webView.navigationDelegate 并实现 -webView:didFinishNavigation: 即可

应用场景

  • 在 iOS 中使用 WKWebview,而 JS 使用 window.webkit.messageHandlers.methodName.postMessage(''); 或类似定义 window.middlewareId.methodName(''); 的方式发送消息

注意点

  1. 当同一类存在多个对象时,替换方法将只在该类第一个对象生效,后续的对象将不会注入脚本。
    • 解决方案:需要在全局手动定义宏 DH_WKWEBVIEW_NOT_SWIZZLING,然后在 -webView:didFinishNavigation: 中使用 -dh_injectJavascriptIfNeed 进行手动注入