V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
newkengsir
V2EX  ›  问与答

一行代码搞定 JS 调用 OC

  •  
  •   newkengsir · 2016-09-07 14:39:47 +08:00 · 1958 次点击
    这是一个创建于 3001 天前的主题,其中的信息可能已经有所发展或是发生改变。

    CHWebView

    点击下载 github 地址

    CHWebView 是一个基于 OC 代码实现的 WebView 轻量级组件,适配 UIWebView 和 WKWebView 的 API 封装成统一的类去使用,并且在加载网页的时候提供进度条,同时简化 JS 与 OC 调用的方式。

    demo 下载

    121

    功能

    • 自如的切换 WKWebView 以及 UIWebView 的使用

    • 提供了网页加载进度条

    • 利用一行代码实现 JS 与 OC 和 Android 的交互

    • 提供基类控制器方便快捷的加载网页

    安装

    目前支持 POD 安装,或者可以实现下载 project 将 CHWebView 文件夹拖入你的工程中

    pod 'CHWebView'
    

    要求

    • iOS 8.0+,

    • Xcode 7.3 or above

    • JavaScriptCore

    • WebKit

    CHWebView 初始化

        CHWebView *webView = [[CHWebView alloc]initWithFrame:rect];
        [webView loadRequest:self.request];
        webView.delegate = self;
        [self.view addSubview:webView];
    

    如果你想使用 UIWebView,调用一下方法

    - ( instancetype)initWithUIWebView; 
    - ( instancetype)initWithUIWebView : (CGRect)frame;
    

    也可以通过 CHWebViewController 初始化

    - (instancetype)initWithURL : (NSString *)url;
    
    - (instancetype)initWithFile : (NSString *)url;
    

    JS 调用 OC 代码

    OC 代码的实现需要注册名称和注册方法接收的对象,如果继承 CHWebViewController 则只需要实现注册名称,Controller 默认为接收对象。

    - (NSArray<NSString *> *)registerJavascriptName{
        return @[@"fetchMessage",@"show"];
    }
    - (NSObject *)registerJavaScriptHandler{
        return self;
    }
    - (void)fetchMessage : (NSDictionary *)dic{
    }
    - (void)show : (NSDictionary *)dic{
    
    }
    

    JS 代码的实现,在 js 的函数中通过使用 NativeBridge 这样一个对象(web 加载完之后自动注入)给 Native 发送消息,NativeBridge({name},{parameter})name 是指注册函数名,parameter 是指传入的参数.

       function nativeFounction() {
           var obj = { 'message' : 'Hello, JS!', 'numbers' : [ 1, 2, 3 ] };
           window.NativeBridge('fetchMessage',obj)
       }
        function showUIFuction(){
           window.NativeBridge('show')
        }
    

    Object-C 调用 JS

    - (void)invokeJavaScript : (NSString *)function;
    
    - (void)invokeJavaScript : (NSString *)function completionHandler : (void (^)( id, NSError * error))completionHandler;
    

    CHWebView 设计图

    121

    Correlation Link

    http://chausson.github.io/2016/08/09/UIWebView%E4%B8%8EWKWebView/

    newkengsir
        1
    newkengsir  
    OP
       2016-09-07 14:40:10 +08:00
    纯分享 如果发错节点,请告知 谢谢支持
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1214 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:19 · PVG 02:19 · LAX 10:19 · JFK 13:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.