UNPKG

para-bridge-demo

Version:

a bridge api for js-ios/andriod rest

82 lines (70 loc) 2.56 kB
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', {})); }) }