次のインタフェース及び実装を提供します。
class | description |
---|---|
CBBDataBus |
iOSアプリ(Objective-c/swift)で利用できるDataBus基本クラス |
CBBWebViewDataBus |
ネイティブコード と WebView(JavaScript) 間で利用できるDataBus |
CBBMemoryQueue |
同一プロセス内での通信機構 |
CBBMemoryQueueDataBus |
CBBMemoryQueue を用いたDataBus |
CBBMultiplexDataBus |
DataBusを多重化 |
本リポジトリの Example ディレクトリが, WKWebView(HTML/JavaScript) と ネイティブコード間の DataBus (CBBWKWebViewDataBus)
で通信をする簡単なサンプル・プロジェクトになっています。
- ネイティブコード: ViewController.m
- HTML: index.html, script.js
Exampleをビルドして動作させる場合, 事前に pod install
を実行してください。
cd Example
pod install
open Example.xcworkspace
abstract_target 'defaults' do
pod 'CBBDataBus', '~2.1.3'
end
WebViewDataBusの基礎的な使用方法を示します。
WKWebView
で Webコンテンツのloadを行う前 にCBBWebViewDataBus
インスタンスを作成する必要がありますCBBWebViewDataBus
は, Webコンテンツ側でDataBusを使用するためのJavaScriptコードをインジェクトします
WKWebView webView = [[WKWebView alloc] init];
CBBWKWebViewDataBus* dataBus = [[CBBWKWebViewDataBus alloc] initWithWKWebView:webView];
[webView loadRequest:request];
注意点: 1つの
WKWebView
に対して作ることができるCBBWKWebViewDataBus
のインスタンスは1つだけです。 複数のDataBusを利用したい場合は,CBBMultiplexDataBus
を用いて多重化してください。
[dataBus addHandler:^(NSArray * _Nonnull data) {
// 受信したdataを処理する
} forName:@"data-bus-name"];
追加したハンドラは
CBBDataBus#removeHandler
またはCBBDataBus#removeAllHandlers
で削除できます。
CBBDataBus#sendData
で NSArray
形式のデータを JavaScript側へ送信できます。
[_dataBus sendData:@[@"This", @"is", @"test", @(1234)]];
次のコードでJavaScript側でDataBusのインスタンスを生成できます。
var dataBus = new CBB.WebViewDataBus();
DataBus#addHandler
で function を追加することで, ネイティブコード側がsendしたデータをハンドリングできます。
dataBus.addHandler(function() {
var data = arguments.join(',');
console.log("received data from native: " + data);
});
DataBus#send
でデータをネイティブコード側へ送信できます。
dataBus.send(1, "arg2", {"arg3": 3});
DataBus#destroy
で破棄することができます。
dataBus.destroy();
DataBus#destroy
で破棄することができます。
dataBus.destroy();
- Source code, Documents: MIT
- Image files: CC BY 2.1 JP