WebApp【公共组件库】@前端(For Git Submodule)
coder77
2025-04-01 d9d6284dad482c5a823c559bacd54552f14b111d
bases/BridgeCenterBase.js
@@ -15,10 +15,12 @@
    _init(tellings) {
        tellings.forEach(method => {
            const name = Fetcher.prototype.stringToCamel(method);
            // BridgeCenter 已注册,但没有定义接收器的协议,提示
            if (typeof this[name] === 'undefined') {
                console.warn('BridgeTelling:未发现“' + method + '”对应接收器!');
            } else {
                // 注册App通知接收器
                console.warn('BridgeTelling:协议【' + method + '】未发现对应接收器!');
            }
            // BridgeCenter 已注册已定义接收器的协议,注册接收器
            else {
                $bridge.register(method, (res, callback) => {
                    this[name](method, res, callback);
                });
@@ -26,15 +28,28 @@
        });
    }
    /**
     * 获取当前页面
     * @return {Taro.Page}
     */
    $getCurrentPage() {
        const pages = Taro.getCurrentPages();
        return pages[pages.length - 1];
    }
    $getCurrentPageUrl() {
        return this.$getCurrentPage().path;
    /**
     * 获取当前页面路径
     * @return {String}
     */
    $getCurrentPagePath() {
        return this.$getCurrentPage().path.split('?')[0];
    }
    /**
     * 判断地址是否为当前页面
     * @param {String} url
     * @return {Taro.Page|null}
     */
    $isCurrentPage(url) {
        const pages = Taro.getCurrentPages();
        const curPage = pages[pages.length - 1];
@@ -45,39 +60,69 @@
        }
    }
    _checkPage(url, callback) {
    /**
     * 判断当前页面是否在列表中
     * @param {Array} allows=[]
     * @return {boolean}
     */
    $isCurPageInside(allows = []) {
        const url = this.$getCurrentPagePath();
        return allows.indexOf(url) >= 0;
    }
    _waitCurPage(url, callback) {
        let curPage = this.$isCurrentPage(url);
        if (curPage) {
            callback(curPage);
        } else {
            setTimeout(() => {
                this._checkPage(url, callback);
                this._waitCurPage(url, callback);
            }, 100);
        }
    }
    /**
     * 打开指定页面
     * @param {String} url
     * @param {Function} callback
     */
    $openPage(url, callback) {
        const curPage = this.$isCurrentPage(url);
        // 需打开的是当前页面
        if (curPage) {
            callback(curPage);
        } else {
            Taro.navigateTo({
                url,
                success: () => {
                    this._checkPage(url, callback);
                },
            });
            Taro.navigateTo({ url });
            setTimeout(() => {
                this._waitCurPage(url, callback);
            }, 100);
        }
    }
    /**
     * 当前页下发通讯
     * @param {String} method
     * @param {Object} res
     * @param {Function} [callback]
     */
    $curPageBridge(method, res, callback) {
        this.$pageBridge(this.$getCurrentPage(), method, res, callback);
    }
    /**
     * 对某个页面下发通知
     * @param {Taro.Page} page
     * @param {String} method
     * @param {Object} res
     * @param {Function} [callback]
     */
    $pageBridge(page, method, res, callback) {
        if (!page.$component || !page.$component.$onBridge) {
            return;
        }
        try {
            res = typeof res === 'string' ? JSON.parse(res) : res;
        } catch (e) {
        }
        } catch (e) {}
        page.$component.$onBridge(method, res, callback);
    }
}