IE не распознает класс Javascript и ломается

Я написал код 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 не загружает эту часть кода?

Возможный дубликат: stackoverflow.com/questions/37194202/…

JRK 19.06.2019 10:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
3 587
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Парсер JS должен анализировать JavaScript, который вы ему приказываете загрузить, даже если это функция, которая никогда не выполняется.

Если вы хотите, чтобы IE не загружал его, то не загружайте <script>, который его содержит. Это означает, что вам нужно динамически добавлять <script>, если браузер поддерживает эту функцию.

Если вам нужно поддерживать IE, не доставляйте JS в браузер, использующий синтаксис, который IE не распознает. Рассмотрите возможность использования такого инструмента, как Babel, для переноса его в более старую версию JavaScript, которую поддерживает IE.

Вы можете проверить IE перед загрузкой скрипта с помощью Условный комментарий :

<!--[if !IE]>-->
<script src = "script.js"></script>
<!--<![endif]-->

Хотя первая строка должна быть <!--[if !IE]>-->, ваш способ мне не помог.

Leonardo Petrucci 19.06.2019 10:59

На самом деле при ближайшем рассмотрении это не работает, IE по-прежнему загружает весь скрипт. Проклятие

Leonardo Petrucci 19.06.2019 11:01

Согласно документации, похоже, что это работает для IE10 и предыдущих версий, и ничего выше.

Zenoo 19.06.2019 11:02
Ответ принят как подходящий

Классы и конструктор JavaScript не поддерживает браузер IE, поэтому в браузере IE будет отображаться ошибка «SCRIPT1002: Syntax error».

Вы можете изменить свой код, как показано ниже:

    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);
        }
    }

Другие вопросы по теме