wxapkg手动解wxml的问题

发布于:2019-07-13 15:22     更新于:2019-07-13 15:31

使用 https://github.com/qwerty472123/wxappUnpacker 这个解一个小程序包 解的时候报错了,查看他的issues发现是v0.6vv_20170919_fbi_wxs版本的,然后这个工具不支持解这个版本的。

网上搜到了 https://my.oschina.net/djsoft/blog/1609184 这个教程 按照里面的步骤是能够解除wxml的。

然后我复制了下这个文章,格式化了下代码。文章里面的代码复制的时候有几个空格没有替换为; 导致程序报错,然后我修复的代码贴在本文中。

解包出来的文件路径

-\pages  每个页面的wxss样式文件

-app-config.json  页面配置的汇总(app.json+各个页面的配置文件)

-app-service.js 源码js的汇总   直接格式化看就行

-page-frame.html wxml文件的汇总

主要处理page-frame.html文件,需要修改里面的部分代码,修改代码如下:

添加wxml 输出方法:

function forwxml(raw){
    var str="";
    for(var i in raw){
        if(i=="tag"){
            if(raw[i]!="virtual"){
                str+="<"+raw[i];
            }
            if(raw["wx:for-items"]!=){
                str+=" wx:for-items=\""+raw["wx:for-items"]+"\"";
            }
            if(raw["wx:key"]!=){
                str+=" wx:key=\""+raw["wx:key"]+"\"";
            }
            if(raw["attr"]!=){
                for(var j in raw["attr"]){
                    str+=" "+j+"=\""+raw["attr"][j]+"\"";
                }
            }
            if(raw[i]!="virtual"){
                str+=">";
            }
            if(raw["children"]!=){
                
                for(var k in raw["children"]){
                    if(typeof(raw["children"][k])=="object"){
                        str+=forwxml(raw["children"][k]);
                    }else{
                        str+=raw["children"][k];
                    }
                }
            }
            if(raw[i]!="virtual"){
                str+="</"+raw[i]+">";
            }
        }
    }
    return str;
}

修改如下的方法:

function _v(k) {
    if (typeof(k) != '') return {
        tag: 'block',
        'wx:for-items': k,
        children: []
    };
    return {
        tag: 'virtual',
        children: []
    };
}

 

function _n(tag) {
    $gwxc++;
    if ($gwxc >= 16000) {
        throw 'Dom limit exceeded, please check if there\'s any mistake you\'ve made.'
    };
    return {
        tag: 'wx-' + tag,
        attr: {},
        children: [],
        n: [],
        raw: {},
        generics: {}
    }
}
function $gwrt(should_pass_type_info) {
    function ArithmeticEv(ops, e, s, g, o) {
        var _f = false;
        var rop = ops[0][1];
        var _a, _b, _c, _d, _aa, _bb;
        switch (rop) {
            case '?:':
                _a = rev(ops[1], e, s, g, o, _f);
                _c = should_pass_type_info && (wh.hn(_a) === 'h');
                _d = wh.rv(_a) ? rev(ops[2], e, s, g, o, _f) : rev(ops[3], e, s, g, o, _f);
                _d = _c && wh.hn(_d) === 'n' ? wh.nh(_d, 'c') : _d;
                //return _d;
                if (typeof(_a) != "boolean" && typeof(_a) != "number" && _a != "") {
                    _a = _a.replace("{{", "").replace("}}", "");
                }
                return "{{" + _a + "?'" + rev(ops[2], e, s, g, o) + "':'" + rev(ops[3], e, s, g, o) + "'}}";

                break;
            case '&&':
                _a = rev(ops[1], e, s, g, o, _f);
                _c = should_pass_type_info && (wh.hn(_a) === 'h');
                _d = wh.rv(_a) ? rev(ops[2], e, s, g, o, _f) : wh.rv(_a);
                _d = _c && wh.hn(_d) === 'n' ? wh.nh(_d, 'c') : _d;
                //return _d;

                if (typeof(_a) != "boolean" && typeof(_a) != "number" && _a != "") {
                    _a = _a.replace("{{", "").replace("}}", "");
                }
                _b = rev(ops[2], e, s, g, o);
                if (typeof(_b) != "boolean" && typeof(_b) != "number" && _b != "") {
                    _b = _b.replace("{{", "").replace("}}", "");
                }
                return _a + "&&" + _b;

                break;
            case '||':
                _a = rev(ops[1], e, s, g, o, _f);
                _c = should_pass_type_info && (wh.hn(_a) === 'h');
                _d = wh.rv(_a) ? wh.rv(_a) : rev(ops[2], e, s, g, o, _f);
                _d = _c && wh.hn(_d) === 'n' ? wh.nh(_d, 'c') : _d;
                //return _d;
                if (typeof(_a) != "boolean" && typeof(_a) != "number" && _a != "") {
                    _a = _a.replace("{{", "").replace("}}", "");
                }
                _b = rev(ops[2], e, s, g, o);
                if (typeof(_b) != "boolean" && typeof(_b) != "number" && _b != "") {
                    _b = _b.replace("{{", "").replace("}}", "");
                }
                return _a + "||" + _b;

                break;
            case '+':
            case '*':
            case '/':
            case '%':
            case '|':
            case '^':
            case '&':
            case '===':
            case '==':
            case '!=':
            case '!==':
            case '>=':
            case '<=':
            case '>':
            case '<':
            case '<<':
            case '>>':
                _a = rev(ops[1], e, s, g, o, _f);
                if (typeof(_a) != "boolean" && typeof(_a) != "number" && _a != "") {
                    _a = _a.replace("{{", "").replace("}}", "");
                }
                _b = rev(ops[2], e, s, g, o, _f);
                if (typeof(_b) != "boolean" && typeof(_b) != "number" && _b != "") {
                    _b = _b.replace("{{", "").replace("}}", "");
                }
                _c = should_pass_type_info && (wh.hn(_a) === 'h' || wh.hn(_b) === 'h');
                switch (rop) {
                    case '+':
                        _d = wh.rv(_a) + wh.rv(_b);
                        break;
                    case '*':
                        _d = wh.rv(_a) * wh.rv(_b);
                        break;
                    case '/':
                        _d = wh.rv(_a) / wh.rv(_b);
                        break;
                    case '%':
                        _d = wh.rv(_a) % wh.rv(_b);
                        break;
                    case '|':
                        _d = wh.rv(_a) | wh.rv(_b);
                        break;
                    case '^':
                        _d = wh.rv(_a) ^ wh.rv(_b);
                        break;
                    case '&':
                        _d = wh.rv(_a) & wh.rv(_b);
                        break;
                    case '===':
                        _d = wh.rv(_a) === wh.rv(_b);
                        break;
                    case '==':
                        _d = wh.rv(_a) == wh.rv(_b);
                        break;
                    case '!=':
                        _d = wh.rv(_a) != wh.rv(_b);
                        break;
                    case '!==':
                        _d = wh.rv(_a) !== wh.rv(_b);
                        break;
                    case '>=':
                        _d = wh.rv(_a) >= wh.rv(_b);
                        break;
                    case '<=':
                        _d = wh.rv(_a) <= wh.rv(_b);
                        break;
                    case '>':
                        _d = wh.rv(_a) > wh.rv(_b);
                        break;
                    case '<':
                        _d = wh.rv(_a) < wh.rv(_b);
                        break;
                    case '<<':
                        _d = wh.rv(_a) << wh.rv(_b);
                        break;
                    case '>>':
                        _d = wh.rv(_a) >> wh.rv(_b);
                        break;
                    default:
                        break;
                }
                //return _c ? wh.nh( _d, "c" ) : _d;
                return "" + _a + rop + _b + "";
                break;
            case '-':
                _a = ops.length === 3 ? rev(ops[1], e, s, g, o, _f) : 0;
                _b = ops.length === 3 ? rev(ops[2], e, s, g, o, _f) : rev(ops[1], e, s, g, o, _f);
                _c = should_pass_type_info && (wh.hn(_a) === 'h' || wh.hn(_b) === 'h');
                _d = _c ? wh.rv(_a) - wh.rv(_b) : _a - _b;
                //return _c ? wh.nh( _d, "c" ) : _d;
                return "" + _a + rop + _b + "";
                break;
            case '!':
                _a = rev(ops[1], e, s, g, o, _f);
                if (typeof(_a) != "boolean" && typeof(_a) != "number" && _a != "") {
                    _a = _a.replace("{{", "").replace("}}", "");
                }
                _c = should_pass_type_info && (wh.hn(_a) == 'h');
                _d = !wh.rv(_a);
                //return _c ? wh.nh( _d, "c" ) : _d;
                return "" + rop + _a + "";

            case '~':
                _a = rev(ops[1], e, s, g, o, _f);
                if (typeof(_a) != "boolean" && typeof(_a) != "number" && _a != "") {
                    _a = _a.replace("{{", "").replace("}}", "");
                }
                _c = should_pass_type_info && (wh.hn(_a) == 'h');
                _d = ~wh.rv(_a);
                //return _c ? wh.nh( _d, "c" ) : _d;
                return "" + rop + _a + "";

            default:
                $gwn('unrecognized op' + rop);
        }
    }

    function rev(ops, e, s, g, o, newap) {
        var op = ops[0];
        var _f = false;
        if (typeof newap !== "") o.ap = newap;
        if (typeof(op) === 'object') {
            var vop = op[0];
            var _a, _aa, _b, _bb, _c, _d, _s, _e, _ta, _tb, _td;
            switch (vop) {
                case 2:
                    return ArithmeticEv(ops, e, s, g, o);
                    break;
                case 4:
                    return rev(ops[1], e, s, g, o, _f);
                    break;
                case 5:
                    switch (ops.length) {
                        case 2:
                            _a = rev(ops[1], e, s, g, o, _f);
                            return should_pass_type_info ? [_a] : [wh.rv(_a)];
                            return [_a];
                            break;
                        case 1:
                            return [];
                            break;
                        default:
                            _a = rev(ops[1], e, s, g, o, _f);
                            _b = rev(ops[2], e, s, g, o, _f);
                            _a.push(should_pass_type_info ? _b : wh.rv(_b));
                            return _a;
                            break;
                    }
                    break;
                case 6:
                    _a = rev(ops[1], e, s, g, o);

                    if (typeof(_a) != "boolean" && typeof(_a) != "number" && _a != "") {
                        _a = _a.replace("{{", "").replace("}}", "");
                    }
                    _b = rev(ops[2], e, s, g, o);
                    if (typeof(_b) != "boolean" && typeof(_b) != "number" && _b != "") {
                        _b = _b.replace("{{", "").replace("}}", "");
                    }
                    if (typeof(_b) == "number") {
                        return "{{" + _a + "[" + _b + "]}}";
                    }
                    return "{{" + _a + "." + _b + "}}";

                    var ap = o.ap;
                    _ta = wh.hn(_a) === 'h';
                    _aa = _ta ? wh.rv(_a) : _a;
                    o.is_affected |= _ta;
                    if (should_pass_type_info) {
                        if (_aa === null || typeof(_aa) === '') {
                            return _ta ? wh.nh(, 'e') : ;
                        }
                        _b = rev(ops[2], e, s, g, o, _f);
                        _tb = wh.hn(_b) === 'h';
                        _bb = _tb ? wh.rv(_b) : _b;
                        o.ap = ap;
                        o.is_affected |= _tb;
                        if (_bb === null || typeof(_bb) === '' || _bb === "__proto__" || _bb === "prototype" || _bb === "caller") {
                            return (_ta || _tb) ? wh.nh(, 'e') : ;
                        }
                        _d = _aa[_bb];
                        if (typeof _d === 'function' && !ap) _d = ;
                        _td = wh.hn(_d) === 'h';
                        o.is_affected |= _td;
                        return (_ta || _tb) ? (_td ? _d : wh.nh(_d, 'e')) : _d;
                    } else {
                        if (_aa === null || typeof(_aa) === '') {
                            return ;
                        }
                        _b = rev(ops[2], e, s, g, o, _f);
                        _tb = wh.hn(_b) === 'h';
                        _bb = _tb ? wh.rv(_b) : _b;
                        o.ap = ap;
                        o.is_affected |= _tb;
                        if (_bb === null || typeof(_bb) === '' || _bb === "__proto__" || _bb === "prototype" || _bb === "caller") {
                            return ;
                        }
                        _d = _aa[_bb];
                        if (typeof _d === 'function' && !ap) _d = ;
                        _td = wh.hn(_d) === 'h';
                        o.is_affected |= _td;
                        return _td ? wh.rv(_d) : _d;
                    }
                    case 7:
                        switch (ops[1][0]) {
                            case 11:
                                o.is_affected |= wh.hn(g) === 'h';
                                return g;
                            case 3:
                                _s = wh.rv(s);
                                _e = wh.rv(e);
                                _b = ops[1][1];
                                if (g && g.f && g.f.hasOwnProperty(_b)) {
                                    _a = g.f;
                                    o.ap = true;
                                } else {
                                    _a = _s && _s.hasOwnProperty(_b) ? s : (_e && _e.hasOwnProperty(_b) ? e : );
                                }
                                if (should_pass_type_info) {
                                    if (_a) {
                                        _ta = wh.hn(_a) === 'h';
                                        _aa = _ta ? wh.rv(_a) : _a;
                                        _d = _aa[_b];
                                        _td = wh.hn(_d) === 'h';
                                        o.is_affected |= _ta || _td;
                                        _d = _ta && !_td ? wh.nh(_d, 'e') : _d;
                                        return _d;
                                    }
                                } else {
                                    if (_a) {
                                        _ta = wh.hn(_a) === 'h';
                                        _aa = _ta ? wh.rv(_a) : _a;
                                        _d = _aa[_b];
                                        _td = wh.hn(_d) === 'h';
                                        o.is_affected |= _ta || _td;
                                        //return wh.rv(_d);
                                        if (!new RegExp("{{").test(_d)) {
                                            return "" + _d + "";
                                        }
                                        return "" + ops[1][1] + "";

                                    }
                                }
                                //return ;
                                return "{{" + ops[1][1] + "}}";
                        }
                        break;
                    case 8:
                        _a = {};
                        _a[ops[1]] = rev(ops[2], e, s, g, o, _f);
                        return _a;
                        break;
                    case 9:
                        _a = rev(ops[1], e, s, g, o, _f);
                        _b = rev(ops[2], e, s, g, o, _f);

                        function merge(_a, _b, _ow) {
                  &n						
阅读 696