如果你想在 Nebula 的基础上添加更多的功能来支持你的 Javascript 代码,你可以通过一些简单的步骤来创建一个新的定制插件。
我们来创建一个叫 addition
的 JS API 函数,它只有两个入参 a
和 b
,并返回这两个参数的和。
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 插件。你可以创造更多的插件来支持业务的增长。