para-bridge-demo
Version:
a bridge api for js-ios/andriod rest
47 lines (40 loc) • 1.57 kB
text/typescript
import { BridgePlugin } from '../bridge';
import { getUrlNtvThird } from '../../utils/bridgeUtils';
import { get, stringify, extend } from 'para-utils';
interface IDataCallbackParam {
tagName: string;
result: string;
}
export class DataCallback<K> extends BridgePlugin<IDataCallbackParam, K>{
protected get ntvPluginName() {
return '_ntv_web_data_callback';
}
protected get availableMinVersion() {
return '1.0.0';
}
/**
* 覆盖基类的默认生成NTV bridge调用参数字符串, 此处 data_callback always需要去parse URL参数
* "ntv_third" 去获取上一个webview传递过来的cbPluginName.
* @param pluginName 当前回调生成的cbPluginName
*/
protected buildNtvParameter(pluginName) {
const urlCbData = getUrlNtvThird();
pluginName = get(urlCbData, 'cbPluginName', pluginName);
return super.buildNtvParameter(pluginName);
}
protected bridgeExecChrome(pluginName?: string | undefined): void {
// 可针对不同运行环境实现特定的调用逻辑来MOCK,弥补平台差异性.
throw new Error('DataCallback() 未针对当前环境实现');
}
}
/**
* 回退上一个webview,并执行上一个webview定义的函数回调With特定的业务参数
* @param cbBizData 回调给上一个webview的自定义业务参数
*/
export const dataCallbackToPreviousWebview = (cbBizData = {}) => {
const urlCbData = getUrlNtvThird();
new DataCallback<void>().invoke({
tagName: 'ntv_data_callback',
result: stringify(extend(true, get(urlCbData, 'cbData'), cbBizData)),
});
}