Я работаю над веб-приложением, которое использует расширение JMol Javascript с Angular. Это сложно. Он работал неплохо, но сегодня перестал работать в Firefox. Когда я что-то пробую, JMol жалуется на ошибку
TypeError: access to strict mode caller function censored
Это происходит в стороннем коде, только в Firefox (который вчера обновился). Он хорошо работает в Chrome.
Я нашел людей, которые годами жаловались на подобную ошибку (без использования JMol). Все они получили интересные ответы - понижение версии jQuery до версии 1.1, перенос некоторых вызовов функций в setTimeout и другие подобные ответы.
Я не смог найти объяснения причины этой ошибки. Что такое вызывающий абонент в строгом режиме, доступ к которому подвергается цензуре и почему? Я также хотел бы увидеть минимальный фрагмент кода, который генерирует эту ошибку в Firefox, чтобы я мог понять, что я пытаюсь исправить.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Происходит то, что код, который пытается использовать свойство caller функции, вызывается кодом строгого режима. Пример:
function attemptToUseCaller() {
console.info(attemptToUseCaller.caller.name);
}
function loose() {
attemptToUseCaller();
}
function strict() {
"use strict";
attemptToUseCaller();
}
loose();
strict();Если вы запустите это в последней версии Firefox, вы увидите это в консоли:
loose TypeError: access to strict mode caller function is censored
Как видите, доступ к attemptToUseCaller.caller работал, когда вызывающая функция находилась в свободном режиме, но не удался, когда вызывающая функция находилась в строгом режиме. Доступ к свойству caller запрещен в строгом режиме и даже запрещен при использовании в «свободном» коде, если вызывающая функция сама по себе является строгой. Firefox выдает конкретную ошибку, тогда как с движком Chrome V8 JavaScript он просто возвращает значение null для .caller в строгом режиме.
Использование caller - это антишаблон. Вам нужно будет форкнуть любой сторонний код, который его использует, и исправить его.
Хорошо, понял, спасибо. Изменение стороннего кода будет настоящей головной болью, поскольку это частично код Javascript, который был автоматически сгенерирован из Java.
@zmbq - Веселое веселье ... :-)
К счастью, я нашел сайт, на котором, похоже, есть рабочая версия JMol - возможно, более старая версия. Я попробую понизить рейтинг и надеюсь на лучшее ...
Можете ли вы проверить: - bugzilla.mozilla.org/show_bug.cgi?id=1170139, stackoverflow.com/questions/14533585/…