CBBDataBus 2.1.6

CBBDataBus 2.1.6

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新版本2017年7月

cbbcbbYoji Suzuki维护。



  • DWANGO Co., Ltd.

提供以下接口和实现。

描述
CBBDataBus iOS应用(Objective-c/swift)中可用的DataBus基本类
CBBWebViewDataBus 可用于原生代码和WebView(JavaScript)之间的DataBus
CBBMemoryQueue 同一进程内的通信机制
CBBMemoryQueueDataBus 使用CBBMemoryQueue的DataBus
CBBMultiplexDataBus 多重化DataBus

示例

本存储库中的ExampleExample-swift目录包含了使用WKWebView(HTML/JavaScript)和原生代码之间的简单样本项目,采用DataBus(CBBWKWebViewDataBus)通信。

screen-shot

若要编译并运行示例,请先执行pod install

cd Example
pod install
open Example.xcworkspace

或者

cd Example-swift
pod install
open Example-swift.xcworkspace

设置

Podfile

abstract_target 'defaults' do
    pod 'CBBDataBus', '~2.1.6'
end

使用方法

以下展示WebViewDataBus的基本使用方法。

步骤 1:WKWebView + DataBus 准备(原生代码)

  • 在用WKWebView加载Web内容之前需要创建CBBWebViewDataBus实例
  • CBBWebViewDataBus将为Web内容注入用于在JavaScript端使用DataBus的JavaScript代码
    WKWebView webView = [[WKWebView alloc] init];
    CBBWKWebViewDataBus* dataBus = [[CBBWKWebViewDataBus alloc] initWithWKWebView:webView];
    [webView loadRequest:request];

注意事项:对于单个WKWebView,可以创建一个CBBWKWebViewDataBus实例。如果需要使用多个DataBus,请使用CBBMultiplexDataBus进行多重化。

步骤 2: 处理JavaScript端send的数据(原生代码)

    [dataBus addHandler:^(NSArray * _Nonnull data) {
        // 受信したdataを処理する
    } forName:@"data-bus-name"];

可以添加的处理器可以通过CBBDataBus#removeHandlerCBBDataBus#removeAllHandlers删除。

步骤 3: 向JavaScript端send数据(原生代码)

使用CBBDataBus#sendData可以将NSArray格式的数据发送到JavaScript端。

    [_dataBus sendData:@[@"This", @"is", @"test", @(1234)]];

步骤 4: 准备DataBus(JavaScript)

以下代码显示了如何在JavaScript端生成DataBus实例。

var dataBus = new CBB.WebViewDataBus();

第5步:从原生代码处接收数据(JavaScript)

DataBus#addHandler 通过添加函数来处理原生代码发送的数据。

    dataBus.addHandler(function() {
        var data = arguments.join(',');
        console.log("received data from native: " + data);
    });

第6步:向原生代码发送数据(JavaScript)

使用 DataBus#send 可以将数据发送到原生代码。

    dataBus.send(1, "arg2", {"arg3": 3});

第7步:废弃

(JavaScript)

通过 DataBus#destroy 进行废弃。

    dataBus.destroy();
(原生代码)

通过 DataBus#destroy 进行废弃。

    dataBus.destroy();

许可