Предотвращение остановки Javascript при возникновении ошибки
Наш продукт вставляет script в клиентские веб-сайты, вроде как в чате.
Часто сайты клиентов имеют багги javascript, который также останавливает наш код (браузер прекращает выполнение при возникновении ошибок). Есть ли способ сделать наш код все еще выполненным, даже если в консоли есть ошибки о таких вещах, как undefined методы или переменные?
Спасибо за вашу помощь.
Ответы
Ответ 1
Как говорили другие, продолжая после ошибки, возможно, не самое лучшее, что можно сделать, но вы можете попробовать следующее:
function ignoreerror()
{
return true
}
window.onerror=ignoreerror();
Подробнее здесь
Событие onerror срабатывает всякий раз, когда возникает ошибка JavaScript (в зависимости от в настройках вашего браузера появляется диалоговое окно с ошибкой). Событие onerror привязано к объекту окна, довольно необычное место, где можно найти убежище, но не зря. Он прикреплен таким образом поэтому он может отслеживать все ошибки JavaScript на странице, даже в раздел страницы.
У Opera есть страница с подробнее
Browsers supporting window.onerror
Chrome 13+
Firefox 6.0+
Internet Explorer 5.5+
Opera 11.60+
Safari 5.1+
Ответ 2
Короткий ответ: вы действительно не можете.
"Решение" # 1:. Вы можете настаивать на том, чтобы ваш сторонний код выполнялся раньше других. В большинстве случаев это невозможно или даже желательно.
"Решение" # 2:. Вы могли бы настаивать на том, чтобы 1-й сторонник завершал весь сторонний код в блоках try/catch
. Но это решение действительно не гарантирует вам никакой гарантии, потому что очень часто сторонние библиотеки прикрепляют дополнительные теги <script>
к странице - они не попадают под "юрисдикцию" области try/catch
, охватывающей код, который создал этот/тег (ы).
"Решение" # 3:. Вы можете полностью разместить свое приложение в рамках <iframe>
, тем самым полностью исключая проблему. К сожалению, даже если вы очень умны, вы быстро столкнетесь с нарушениями между доменами, ограничениями сторонних файлов cookie и т.п. Очень вероятно, что это не сработает для вас.
"Решение" №4:. Вы можете объяснить проблему своему клиенту и попросить, чтобы другой сторонний код выполнялся чисто. Я говорю, что это "решение", потому что, честно говоря, это не "решение" вашего вопроса, если ваш вопрос заключается в том, как избежать этого.
К сожалению, вариант №4 - ваш лучший выбор. Это может помочь, если вы заметите, что другие сторонние библиотеки "ломаются" одинаково: вы можете сказать своему клиенту "эй, это не только я - X, Y и Z, все также" сломаны "из-за < имя другого Сторонняя библиотека > ." Это может привести к тому, что они будут нагревать код нарушения, что делает веб более счастливым местом для всех участников.
Ответ 3
Вы не можете из своего кода - им нужно использовать try
/catch
для сомнительных частей script.
Ответ 4
Вы могли бы добавить в свою страницу iframe
вместо того, чтобы пытаться ввести код с помощью тега script
, например: http://jsfiddle.net/EzMGD/ Обратите внимание, что script выдает ошибку, но мы все еще можем видеть содержимое в iframe. Iframe должен помочь использовать переменные друг друга, если это применимо.
<script>
MeaningOfLife();
</script>
<iframe src="http://bing.com"></iframe>
Или введите код так, чтобы он был первым или последним script
.
Ответ 5
Ну, мне это хорошо работает:
element = document.querySelector('.that-pretty-element');
if (element != null) {
element.onclick = function () {
alert(" I'm working beibi ;) ");
}
}
querySelector()
возвращает false
, поэтому мы можем проверить с помощью if's