Игнорировать JS Uncaught исключения в браузере - PullRequest
2 голосов
/ 27 марта 2012

Есть ли способ указать браузеру, Opera или Chrome, например, не останавливать выполнение сценариев, если он встречает необработанное исключение?Мне просто нужно протестировать некоторые JS-скрипты в браузере, но страница также содержит некоторый код для другой среды выполнения (не в обычном браузере), поэтому модифицировать код, так как перенос с помощью try / catch нецелесообразен.

Для Chrome IПопытка поставить код, который устанавливает функцию обработчика на window.onerror, которая просто возвращает true, тогда ошибка не появилась в консоли, но выполнение сценариев все равно прервано.

Если быть точным, страница содержит коддля платформы Appcelerator Titanium, но я тестирую только общий код jQuery, поэтому я бы хотел сделать это в браузере.

Ответы [ 2 ]

2 голосов
/ 18 июля 2015

Если вы вызываете подозрительный код с отложенным способом

setTimeout(THIS_MIGHT_THROW, 0)

, то все сгенерированные ошибки прервут «поток» или «микро-задачу», но не повлияют на остальную часть вашего выполнения.

0 голосов
/ 18 июля 2015

Как бы практично ни выглядела ваша идея, на практике ее невозможно реализовать.

Для сравнения, язык программирования Java заставляет обрабатывать отмеченные исключения (исключения, из которых вы можете восстанавливаться), в то время как непроверенные исключения (например, RuntimeException - исключения, которые вы не можете восстановить) могут просто происходить нормально при время выполнения вне вашего контроля. Поскольку они по существу невосстановимы , ваша программа должна остановиться.

Исключения, возникающие в JS JSM, в отличие от java, невозможно разделить на категории с проверкой и без проверки. Поскольку такого различия нет, невозможно избежать остановки сценария.

Что если вы разделите функцию / бесконечность? Как вы должны оправиться от этого? На каждый отдельный сценарий существует отдельный ответ. Вот почему единственный оставшийся и действительный ответ на вашу проблему - это использовать блок try catch каждый раз, когда вы боитесь, что произойдет Exception, и остановить ваш код, и обрабатывать его специально для этой ситуации.


Что касается обработчика событий window.onerror, он не имеет значения для этого вопроса, поскольку он не перехватывает исключения времени выполнения, он перехватывает ошибку, которая возникает, когда исходное исключение не перехватывается в блоке try catch . Вот почему вы получаете великолепное «Uncaught exception: xxxxx», добавленное к фактическому, оригинальному сообщению об исключении. Исключение уже произошло, ваш сценарий уже остановлен, все, что вы можете сделать, это отобразить его так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...