#javascript #constructor #internet-explorer-11 #bind
#javascript #конструктор #internet-explorer-11 #привязка
Вопрос:
При загрузке страницы я запускаю функцию, которая должна открыть лайтбокс. В Chrome, FF, Opera, Edge и Safari все работает так, как задумано. Однако в IE11 это не так. Я не получаю предупреждение или ошибку в консоли, поэтому я понятия не имею, что я здесь делаю не так.
Я удалил приведенный ниже код до самого необходимого. В Chrome (и других браузерах) журнал консоли меняется с 1 на 3 на 2. В IE11 я получаю только 1, и я понятия не имею, почему он не переходит к 3 или 2. Я думал, что это как-то связано с bind() , но, похоже, это поддерживается.
Я должен признать, что я довольно новичок в конструкторах, прототипах и привязке.
constructor(el) {
this.$el = $(el);
console.log('1');
this.getLocation = getLocation.bind(this);
this.loadLB();
console.log('2');
}
loadLB() {
const url = new URL(window.location.href);
console.log('3');
this.getLocation('url');
}
Комментарии:
1. Внимание!
const
в IE является псевдонимомvar
, его область действия не ограничивается блоком, в котором он был объявлен. Хотя это не влияет на ваш текущий код, полезно знать. Я поражен, если в IE нет сообщений об ошибках, посколькуURL
конструктор не поддерживается. Вы уверены, что сообщения об ошибках не отфильтровываются из вашей консоли IE?2. Спасибо Teemu, вы, кажется, решили ее. Я не подозревал о конструкторе URL, но это была проблема… Я копал глубоко. Спасибо.
3. Я смог решить ее с помощью ответа Teemu, но и ваши разъяснения тоже. Спасибо за усилия.
Ответ №1:
Используете ли вы ConstructorMethod? Он также не поддерживается IE. Я не знаю, использовали ли вы некоторые полизаполнения, чтобы заставить его работать в IE 11.
Кроме того, IE не поддерживает конструктор URL(). Вы можете добавить это полизаполнение, чтобы заставить URL()
работать в IE 11:
<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>