Подтвердить что ты не робот

Предотвращение остановки Javascript при возникновении ошибки

Наш продукт вставляет script в клиентские веб-сайты, вроде как в чате.

Часто сайты клиентов имеют багги javascript, который также останавливает наш код (браузер прекращает выполнение при возникновении ошибок). Есть ли способ сделать наш код все еще выполненным, даже если в консоли есть ошибки о таких вещах, как undefined методы или переменные?

Спасибо за вашу помощь.

4b9b3361

Ответ 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