para-bridge-demo
Version:
a bridge api for js-ios/andriod rest
82 lines (70 loc) • 2.56 kB
text/typescript
import { BridgePlugin } from '../bridge';
import { modifyQueryString, parse, get } from 'para-utils';
import { setUrlNtvThird } from '../../utils/bridgeUtils';
interface IOpenNewUrlParam {
openParams: string;
jumpUrl: string;
// used on openNewUrlWithDataCallback();
cbData?: object;
}
export class OpenNewUrl<K> extends BridgePlugin<IOpenNewUrlParam, K> {
protected get ntvPluginName() {
return '_ntv-web_open_new_url';
}
protected get availableMinVersion() {
return '1.0.0';
}
/**
* 覆盖基类的默认生成NTV bridge调用参数字符串,这里需要在URL上拼装cbPluginName, cbData
* @override
* @param cbPluginName 当前回调生成的cbPluginName,
*/
protected buildNtvParameter(pluginName) {
if (this.param && pluginName) {
this.param.jumpUrl = setUrlNtvThird(this.param.jumpUrl, {
cbPluginName: pluginName, cbData: this.param.cbData
});
// we don't need to pass cbData to native.
delete this.param.cbData;
}
return super.buildNtvParameter();
}
protected bridgeExecChrome(pluginName?: string | undefined): void {
console.warn('当前浏览器环境:bridgeExecChrome()');
if (this.param) {
window.location.href = this.param.jumpUrl;
} else {
throw new Error('请指定浏览器跳转的URL全路径地址');
}
}
}
/**
* 打开新窗口H5地址或者合法的client://协议地址
* @param url URL地址
*/
export const openNewUrl = (url: string) => {
new OpenNewUrl<void>({
openParams: 'newWindow,needSlide',
jumpUrl: url
}).invoke();
}
/**
* 打开新窗口H5地址或者合法的client://协议地址, 同时自动生成一个callback函数绑定,
* 可允许下一个webview 调用调用dataCallbackToPreviousWebview();
* 注意每次调用都会生成一个新的实例,回调不同
* @param url 有效的URL地址
* @param query 可选, 直接拼接到url地址上面 key=value&key1=value1
* @param cbData 可选,可以把当前页面的部分关键数据传递到下一个WEBVIEW,待下一个webview 调用data_callback再带上新的业务参数回调回来.
* 这样就不用参数上拼来拼去了
*/
export const openNewUrlWithDataCallback = (url: string, query = {}, cbData = {}) => {
const newUrl = modifyQueryString(url, query);
return new OpenNewUrl({
openParams: 'newWindow,needSlide',
jumpUrl: newUrl,
cbData
}).invokeOnce().then(result => {
console.log('openNewUrlWithDataCallback: ', result);
return parse(get(result, 'cbData', {}));
})
}