解决Odoo 12中移动Safari浏览器上的JS语法错误

Resolving JS Syntax Error on Mobile Safari Browser in Odoo 12

提问人:Cybatrex 提问时间:10/31/2019 最后编辑:CommunityCybatrex 更新时间:6/2/2021 访问量:227

问:

错误:SyntaxError:字符串与预期的模式不匹配。

浏览器:Safari(仅限移动设备) 文件类型: .js 此部分错误: if (a.matches(rulesCache[r].
selector))
{

非常感谢您查看此代码以帮助我确定问题。

 var css = [];
var style;
a.matches = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.msMatchesSelector || a.oMatchesSelector;
for (r = 0; r < rulesCache.length; r++) {
    if (a.matches(rulesCache[r].selector)) {
        style = rulesCache[r].style;
        if (style.parentRule) {
            var style_obj = {};
            var len;
            for (k = 0, len = style.length ; k < len ; k++) {
                if (style[k].indexOf('animation') !== -1) {
                    continue;
                }
                style_obj[style[k]] = style[style[k].replace(/-(.)/g, function (a, b) { return b.toUpperCase(); })];
                if (new RegExp(style[k] + '\s*:[^:;]+!important' ).test(style.cssText)) {
                    style_obj[style[k]] += ' !important';
                }
            }
            rulesCache[r].style = style = style_obj;
        }
        css.push([rulesCache[r].selector, style]);
    }
}
jquery 语法错误 mobile-safari odoo-12

评论

0赞 Hugo Garcia 11/21/2019
你设法找到并回答了吗?我在 Safari 和 Odoo 12 上有相同的行为

答:

0赞 elinarezv 6/2/2021 #1

我们仍然没有找到错误的根源(在错误 rulesCache[r].selector == “@page”上),但为了避免这种情况,我们放置了一个像这样的 try/catch:

for (r = 0; r < rulesCache.length; r++) {
        try {
            let matchRule = a.matches(rulesCache[r].selector);
            if (matchRule) {
                style = rulesCache[r].style;
                if (style.parentRule) {
                    var style_obj = {};
                    var len;
                    for (k = 0, len = style.length; k < len; k++) {
                        if (style[k].indexOf('animation') !== -1) {
                            continue;
                        }
                        style_obj[style[k]] = style[style[k].replace(/-(.)/g, function(a, b) { return b.toUpperCase(); })];
                        if (new RegExp(style[k] + '\s*:[^:;]+!important').test(style.cssText)) {
                            style_obj[style[k]] += ' !important';
                        }
                    }
                    rulesCache[r].style = style = style_obj;
                }
                css.push([rulesCache[r].selector, style]);
            }
        } catch (e) {
            console.warn("Can't process selector: " + rulesCache[r].selector, e);
            continue;
        }
    }

希望这对你有用。 此致敬意