Обработка ошибок времени выполнения на лениво загруженном JavaScript? - PullRequest
0 голосов
/ 08 сентября 2010

У кого-нибудь есть идеи, как делать обработку ошибок на лениво загруженном JavaScript?Я использую подход, в котором вызывается ajax-запрос и код eval'd в глобальной области видимости.Когда возникает ошибка во время выполнения, он выдает имя файла в качестве моего ленивого загрузочного скрипта, а номер строки - это строка ошибки плюс номер строки моего eval в моем загрузочном скрипте.Это было бы не так плохо, если бы все файлы javascript не были объединены в модули для разделов сайта.Попытка перехватить сам файл javascript не отловит ошибки времени выполнения функций.Есть идеи?Window.onerror не предоставляет правильное имя файла, поэтому о нем не может быть и речи.Мне нужно поймать его до того, как его ударили.

Я подумал, может быть, я мог бы программно включить попытку перехватить все функции в коде eval'd (что некрасиво), но так как это делается в окнеУровень Я не уверен, как получить доступ к eval'd код специально и динамически.Конечно, если javascript - это объект с именем «Bob», я могу получить доступ к window.Bob, но мне нужно сделать это динамически.

1 Ответ

1 голос
/ 09 сентября 2010

Я решил проблему, но это не самое элегантное решение.По сути, я делаю так:
1. После загрузки сайта я смотрю на все объекты в окне и помещаю их в массив.Это в основном говорит моему коду, игнорируйте эти объекты.

Когда я модулирую свой код, я отслеживаю длину файлов и файловых имен, помещаемых в модуль.

Последняя строка модулятора принимает массив fileLengthи lineLengths и вызывает функцию в моем объекте обработки ошибок;

Код обработки ошибок находит новые объекты в окне.Если они существуют, задайте свойство, совпадающее с fileLengths и fileNames;

Пройдите по новым объектам и добавьте декорирование функций, чтобы их можно было попробовать попробовать.

При попадании в одну из этих ловушек перейдите вверх и найдите свойства.

Рассчитайте номер файла и строки на основе свойств.

Вывести новую ошибку на основе правильного файла и номера строки;

Да, некрасиво ... но это работает.

...