简单的js只在边缘给出语法错误

时间:2019-06-11 00:05:27

标签: javascript internet-explorer microsoft-edge

我已经编写了一个简单的Vanilla js插件,该插件使用文件读取器API来构建文件上传器组件;

https://github.com/Cerealkillerway/fileUploader

除了在ms-edge或ie上引发语法错误外,它工作正常。 在边缘,它将在updateLabel函数的左括号中引发错误: https://github.com/Cerealkillerway/fileUploader/blob/master/js/fileUploader.js

该函数出错:

    let updateLabel = function(type, value) {
        for (let label of instanceLabels[`${type}Labels`]) {
            let labelSpan = label.querySelector(':scope > span');
            let prevValue;

            switch(value) {
                case '++':
                prevValue = parseInt(labelSpan.innerHTML) + 1;
                labelSpan.innerHTML = prevValue;
                break;

                case '--':
                prevValue = parseInt(labelSpan.innerHTML) - 1;
                labelSpan.innerHTML = prevValue;
                break;

                default:
                labelSpan.innerHTML = value;
            }
        }
    };

2 个答案:

答案 0 :(得分:0)

似乎MS Edge非常重视函数声明的想法。在其他浏览器允许您摆脱这种情况的地方,以下代码实际上是无效的(第790行):

for (let label in labelsClasses) {
    function findLabel(container, labelsClasses, label) {
      /* implementation */     
    }
}

函数声明只能在代码的“顶层”中声明。具体地说,这意味着它们只能在全局/模块范围内或在另一个函数声明的顶层创建。

更改声明以使用函数表达式:

for (let label in labelsClasses) {
    let findLabel = function(container, labelsClasses, label) {
      /* implementation */     
    }
}

答案 1 :(得分:0)

对于其他有类似问题的人,问题是由于remotes::install_github('rstudio/rmarkdown') 选择器所致,该选择器在edge或ie中均不受支持;

我已经通过为它导入一个polyfill(https://www.npmjs.com/package/element-qsa-scope)来解决了这个问题