Nebula

定制化

如果你想在 Nebula 的基础上添加更多的功能来支持你的 Javascript 代码,你可以通过一些简单的步骤来创建一个新的定制插件。

新的 JS API

我们来创建一个叫 addition 的 JS API 函数,它只有两个入参 ab,并返回这两个参数的和。

AlipayJSBridge.call("addition", {
  a: 1,
  b: 2
}, function(result) {
  console.log(result.sum); // expect 3
});

插件

首先我们要创造一个衍生自 H5SimplePlugin的类

public class MyPlugin extends H5SimplePlugin {

}

实现 onPrepare() 方法,并在这里注册 addition 事件

@Override
public void onPrepare(H5EventFilter filter) {
  List<String> list = new ArrayList<>();
  list.add("addition");
  filter.setEventsList(list);
}

接下来我们要实现 handleEvent() 方法来处理这个事件。这里请主要我们实现的是 handleEvent() 而不是 interceptEvent(),这是因为 addition 事件只会在这个插件里处理而不应该派遣到其他事件节点。请点击这里来了解 handleEvent()interceptEvent() 的区别。

@Override
public boolean handleEvent(H5Event event, final H5BridgeContext bridgeContext) {
  // Get the JS API action name from event
  String action = event.getAction();
  if ("addition".equals(action)) {
    additionInternal(event, bridgeContext);
  }
  // Return true since this event is to be consumed in this class
  return true;
}

核心业务逻辑在 additionInternal() 方法中实现。

private void additionInternal(H5Event event, final H5BridgeContext bridgeContext) {
  if (event == null) {
    return;
  }

  // Retrieve a and b from event param
  JSONObject params = event.getParam();
  int a = params.getIntValue("a");
  int b = params.getIntValue("b");

  // Perform addition
  int sum = a + b;

  // Construct the result object
  JSONObject result = new JSONObject();
  result.put("sum", sum);

  // Send the json result to Javascript
  bridgeContext.sendBridgeResult(result);              
}

就是这么简单,你已经创建了一个定制的 JS API 插件。你可以创造更多的插件来支持业务的增长。