IE не распознает класс Javascript и ломает - PullRequest
0 голосов
/ 19 июня 2019

Я написал некоторый код 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 ]

1 голос
/ 19 июня 2019

Классы JavaScript и конструктор не поддерживают браузер 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);
        }
    }
1 голос
/ 19 июня 2019

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

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

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

0 голосов
/ 19 июня 2019

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

<!--[if !IE]>-->
<script src="script.js"></script>
<!--<![endif]-->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...