特定の時間に何かを実行する場合、たとえば、ページにアクセスしたときにイベントをログに記録する場合、プラグインを開発する必要があります。プラグインが対応するイベントをサブスクライブすると、ハンドラでイベントに付随するデータを処理できます。
このタスクについて
プラグインのカスタマイズ手順は、次の 3 つのステップに分かれています。
コードサンプルを参照して、システムが H5 ページを読み込むときにページナビゲーションバーを変更するプラグインをカスタマイズする方法を学習してください。
手順
プラグインを作成する
次のような形式でプラグインクラスを作成します。以下の考慮事項が適用されます。
名前:コンテナによってデフォルトで提供されるプラグイン名との一貫性を保つために、名前は
XXPlugin4で始まります。ここで、XXはカスタムプレフィックスです。基底クラス:すべてのプラグインは
NBPluginBaseから継承します。基本メソッドの実装:
.mファイルでは、次の 3 つのメソッドをオーバーライドする必要があります。- (void)pluginDidLoad:必須。イベントを監視するには、イベントリストについてヘッダーファイルNBDefines.hを参照してください。- (void)addJSApis:オプション。H5 と通信するため、JSAPI を登録する場合があります。- (void)handleEvent:必須。監視対象のイベントがトリガーされたときにロジックを処理します。
.h ファイルは次のとおりです。

.m ファイルは次のとおりです。

イベントを監視する
- (void)pluginDidLoad メソッドで、監視する必要があるイベントを登録します。
- (void)pluginDidLoad {
self.scope = kPSDScope_Scene; // 1
[self.target
addEventListener:kNBEvent_Scene_TitleView_Title_Click // 2
withListener:self // 3
useCapture:NO]; // 4
[super pluginDidLoad];
}addEventListener メソッドは特定のイベントを監視するために使用されます。各ステップの説明は次のとおりです。
名前 | 定義 |
scope | イベントが動作する範囲を設定します。現在、サポートされている範囲は、小さい方から大きい方へ、Scene、Session、Service です。 |
event | イベント名を設定します。イベント定数は |
listener | イベントの処理プログラム、つまり |
capture | キャプチャによってイベントをブロードキャストするかどうかを設定します。通常は |
JSAPI を追加する
プラグインの登録プロセスで、H5 ページと対話するために JSAPI をカスタマイズする必要がある場合は、コードの - (void)addJSApis メソッドで JSAPI を登録できます。詳細については、「JSAPI のカスタマイズ > コードで登録する」をご参照ください。このメソッドを実装するかどうかは、必要に応じて決定できます。
- (void)addJSApis
{
[super addJSApis];
// TitleView に関連するカスタム JSAPI を追加できます
}モニターを処理する
最後に、監視対象のイベントがトリガーされたときに、- (void)handleEvent でロジックを処理します。
- (void)handleEvent:(NBNavigationTitleViewEvent *)event
{
[super handleEvent:event];
if([kNBEvent_Scene_TitleView_Create_Before isEqualToString:event.eventType]) {
// TitleView をカスタマイズする場合、デフォルトの kNBEvent_Scene_TitleView_[Title_Set | Title_Click | Subtitle_Click] およびその他のイベントのサポートは失われます
NBNavigationTitleViewEvent *e = (NBNavigationTitleViewEvent *)event;
H5WebViewController *currentViewController = (H5WebViewController *)event.context.currentViewController;
UINavigationController *navi = currentViewController.navigationController ?:(UINavigationController *)APPDELEGATE.window.rootViewController;
UINavigationBar *bar = navi.navigationBar;
H5NavigationTitleView *newTitleView = [self createNavigationTitleView:bar.bounds];
[newTitleView setMainTitle:@"Recreate" subtitle:nil];
newTitleView.delegate = [e.titleView delegate];
currentViewController.navigationItem.titleView = newTitleView;
e.titleView = newTitleView;
[e preventDefault];
}
}注:- (void)pluginDidLoad メソッドで監視されているイベントがトリガーされると、イベントトリガー時のロジックは - handleEvent: メソッドで処理されるため、複数のメソッドを監視している場合は、event の class または eventType に従ってイベントを個別に処理する必要があります。
プラグインを登録する
プラグインクラスを作成した後、カスタム plist ファイルにこのプラグインを登録する必要があります。詳細については、「JSAPI のカスタマイズ > JSAPI を登録する」をご参照ください。

登録されたプラグインは辞書型で、次の 3 つの項目が含まれています。
名前 | 定義 |
name | 作成されたプラグインクラスの名前 |
scope | プラグインが動作する範囲 |
events | 監視対象のイベントの名前 |
プラグインを使用する
pluginDidLoadメソッドにブレークポイントを追加して、トリガー時間の呼び出しシーケンススタックが正しいかどうかを確認します。
handleEventメソッドにブレークポイントを追加して、監視対象のイベントが正しくトリガーされるかどうかを確認します。
H5 ページのカスタムナビゲーションバーのスタイルが有効になっているかどうかを確認します。