yoho.js 5.24 KB
/**
 * YOHO-SDK
 *
 * 与原生 APP 交互的代码
 * 所有函数要做降级处理
 * 假如不是 YOHO App,在浏览器实现对应的功能
 * 浏览器不支持的功能,给出提示,控制台不能报错,不影响后续代码执行
 *
 * 希望能与 微信 JS-SDK 一样方便
 */

const tip = require('common/tip');
const native = window.yohoInterface;

window.yohoWapInterface = {
    headerRightTopBtn: function() {}
};

const yoho = {
    /**
     * 判断是否是 APP
     */
    isApp: /yh_blk/i.test((navigator.userAgent || '').toLowerCase()),

    /**
     * JS 与 APP 共享的对象
     */
    data: window.yohoInterfaceData,

    /**
     * 跳转至指定index的tab(从0开始)
     * @param args 传递给 APP 的参数
     * @param success 调用成功的回调方法
     * @param fail 调用失败的回调方法
     */
    goTap(args, success, fail) {
        if (this.isApp) {
            native.triggerEvent(success || function() {}, fail || function() {}, {
                method: 'go.tab',
                arguments: args
            });
        } else {
            tip('暂不支持,请在BLK应用中打开');
        }
    },

    /**
     * 跳转至登陆页面
     * @param args 传递给 APP 的参数
     * @param success 调用成功的回调方法
     * @param fail 调用失败的回调方法
     */
    goLogin(args, success, fail) {
        if (this.isApp) {
            native.triggerEvent(success || function() {}, fail || function() {}, {
                method: 'go.login',
                arguments: args
            });
        } else {
            tip('暂不支持,请在BLK应用中打开');
        }
    },

    /**
     * 跳转至购物车页面
     * @param args 传递给 APP 的参数
     * @param success 调用成功的回调方法
     * @param fail 调用失败的回调方法
     */
    goShopingCart(args, success, fail) {
        if (this.isApp) {
            native.triggerEvent(success || function() {}, fail || function() {}, {
                method: 'go.shopingCart',
                arguments: args
            });
        } else {
            tip('暂不支持,请在BLK应用中打开');
        }
    },

    /**
     * 跳转至地址管理页面
     * @param args 传递给 APP 的参数
     * @param success 调用成功的回调方法
     * @param fail 调用失败的回调方法
     */
    goAddress(args, success, fail) {
        if (this.isApp) {
            native.triggerEvent(success || function() {}, fail || function() {}, {
                method: 'go.address',
                arguments: args
            });
        } else {
            tip('暂不支持,请在BLK应用中打开');
        }
    },

    /**
     * 跳转至图片浏览页面
     * @param args 传递给 APP 的参数
     * @param success 调用成功的回调方法
     * @param fail 调用失败的回调方法
     */
    goImageBrowser(args, success, fail) {
        if (this.isApp) {
            native.triggerEvent(success || function() {}, fail || function() {}, {
                method: 'go.imageBrowser',
                arguments: args
            });
        } else {
            tip('暂不支持,请在BLK应用中打开');
        }
    },

    /**
     * 跳转至新页面(页面内容为html)
     * @param args 传递给 APP 的参数
     * @param success 调用成功的回调方法
     * @param fail 调用失败的回调方法
     */
    goNewPage(args, success, fail) {
        if (this.isApp) {
            native.triggerEvent(success || function() {}, fail || function() {}, {
                method: 'go.newPage',
                arguments: args
            });
        } else {
            tip('暂不支持,请在BLK应用中打开');
        }
    },

    /**
     * 跳转至支付页面
     * @param args 传递给 APP 的参数
     * @param success 调用成功的回调方法
     * @param fail 调用失败的回调方法
     */
    goPay(args, success, fail) {
        if (this.isApp) {
            native.triggerEvent(success || function() {}, fail || function() {}, {
                method: 'go.pay',
                arguments: args
            });
        } else {
            tip('暂不支持,请在BLK应用中打开');
        }
    },

    /**
     * 回到上一个原生界面
     * @param args
     * @param success
     * @param fail
     */
    goBack(args, success, fail) {
        if (this.isApp) {
            native.triggerEvent(success || function() {}, fail || function() {}, {
                method: 'go.back',
                arguments: args
            });
        } else {
            tip('暂不支持,请在BLK应用中打开');
        }
    },

    /**
     * 分享
     * @param args
     * @param success
     * @param fail
     */
    goShare(args, success, fail) {
        if (this.isApp) {
            native.triggerEvent(success || function() {}, fail || function() {}, {
                method: 'go.share',
                arguments: args
            });
        } else {
            tip('暂不支持,请在BLK应用中打开');
        }
    },

    /**
     * 原生调用 JS 方法
     * @param name 方法名
     * @param callback 回调
     */
    addNativeMethod(name, callback) {
        window.yohoWapInterface[name] = callback;
    }
};

module.exports = yoho;