IE无法识别Javascript类并中断

时间:2019-06-19 08:30:19

标签: javascript internet-explorer

我写了一些在所有主流浏览器上都能正常运行的Javascript代码。当然,我通过创建一个指出用户使用哪种浏览器的函数,来确保Internet Explorer不会执行任何操作。

这是问题所在:即使我告诉IE不要执行代码,浏览器仍会读取我的所有Javascript,并且由于发现无法识别的内容,因此它会停止运行其他Javascript。

我唯一想做的就是创建一个函数,该函数将在用户使用IE时返回,但这似乎不起作用,因为我认为问题出在IE最初解析我的脚本而无法了解现代JS语法。

这是我的代码的简化版本:

  class Section {
    constructor(dom, startPosition, endPosition, backgroundPosition) {
      this.dom = dom;
      this.startPosition = startPosition;
      this.endPosition = endPosition;
      this.backgroundPosition = backgroundPosition;
    }
  }


function isIE() {
  ua = navigator.userAgent;
  /* MSIE used to detect old browsers and Trident used to newer ones*/
  var is_ie = ua.indexOf("MSIE ") > -1 || ua.indexOf("Trident/") > -1;

  return is_ie;
}

let sections = [];
function sectionParallax() {
  if (!isIE()) {
    sections.push( new Section("test", 123, 123, 123))
  }
}

IE的控制台报告:

SCRIPT1002: Syntax error

class Section上。

我完全不知道该怎么做。如何确保IE不会加载这部分代码?

3 个答案:

答案 0 :(得分:1)

即使它是一个永远不会执行的功能,JS解析器也必须解析您告诉它加载的JavaScript。

如果要停止IE的加载,请不要加载包含它的<script> 。这意味着如果浏览器确实支持<script>,则需要动态添加该功能。

如果您需要支持IE,请不要将JS传递给使用IE无法识别的语法的浏览器。考虑使用Babel这样的工具将其转换为IE支持的旧版JavaScript。

答案 1 :(得分:1)

JavaScript classes and constructor不支持IE浏览器,因此,在IE浏览器中,它将显示“ SCRIPT1002:语法错误”错误。

您可以如下修改代码:

    var Section = /** @class */ (function () {
        function Section(dom, startPosition, endPosition, backgroundPosition) {
            this.dom = dom;
            this.startPosition = startPosition;
            this.endPosition = endPosition;
            this.backgroundPosition = backgroundPosition;
        }
        return Section;
    }());
    function isIE() {
        ua = navigator.userAgent;
        /* MSIE used to detect old browsers and Trident used to newer ones*/
        var is_ie = ua.indexOf("MSIE ") > -1 || ua.indexOf("Trident/") > -1;
        return is_ie;
    }
    var sections = [];
    function sectionParallax() {
        if (!isIE()) {
            /*If not using IE browser.  */
            var newsection = new Section("test", 123, 123, 123);
            sections.push(newsection);
        }
    }

答案 2 :(得分:0)

您可以在使用Conditional Comment加载脚本之前检查 client = new RestClient( url + "/data/csv-import/"); request = new RestRequest(Method.POST); request.AddHeader("cache-control", "no-cache"); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddHeader("X-CSRFToken", csrftoken); request.AddCookie("csrftoken", csrftoken); request.AddCookie("sessionid", sessionId); request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"); request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"csv_file\"; filename=\"filename.csv\"\r\nContent-Type: text/csv\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"has_headers\"\r\n\r\ntrue\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody); request.AddFile("csv_file", filePath + "filename.csv"); response = client.Execute(request);

IE