Как продолжить выполнение JavaScript при получении ошибок во время загрузки
Не уверен, что лучший способ сформулировать вопрос, но предположим, что вы используете jQuery для настройки различных вещей, например:
<script>
function doSecond(){
alert("Hi");
}
function dofirst(){
var x = asdasd;
}
$(dofirst);
$(doSecond);
</script>
Итак, представьте, что до и первая доза секунды полностью независимы. Если dofirst генерирует исключение, которое, конечно, будет, то doSecond никогда не сработает. Я понимаю, почему это происходит, но мне интересно, есть ли способ обойти это без необходимости оборачивать КАЖДЫЙ вид обработчика jQuery, который я хочу установить в try catch. Например, я бы предпочел не делать:
try{
$(doFirst);
}
catch{
//maybe log here?
}
try{
$(doSecond);
}
catch{
//maybe log here?
}
Теперь, если вам интересно, почему я хочу это сделать? Ну, возьмем, к примеру, код на странице, которую вы сейчас просматриваете:
<script type="text/javascript">
$(function() {
$('#title').focus(function() { $('#how-to-tag').hide(); $('#how-to-format').hide(); $('#how-to-title').fadeIn('slow'); });
$('#wmd-input').focus(function() { $('#how-to-tag').hide(); $('#how-to-format').fadeIn('slow'); $('#how-to-title').hide(); });
$('#tagnames').focus(function() { $('#how-to-tag').fadeIn('slow'); $('#how-to-format').hide(); $('#how-to-title').hide(); });
});
</script>
Действительно ли необходимо, чтобы некоторые элементы dom исчезали при нажатии на них? Нет. Но если вы допустите ошибку в этой функции, то вполне возможно, что другой javascript, который вам действительно нужно запустить, может никогда не получить настройки.
2 ответа
Несколько способов убедиться, что все работает независимо друг от друга:
Как вы сказали, попробуйте / поймать вокруг каждого
Вызывайте каждый из них в setTimeout (или для этого нужен синтаксический сахар jQuery)
Разделить на разные
<script>
блоки
Очевидно, что никогда не выбрасывать исключение - нелепое предложение. Особенно в мире много браузеров / версий / серверов вверх / серверов вниз. Существует множество способов взломать сайт JS, так что трудно найти сайт любого размера, который не исключение какого-либо типа (при рассмотрении консоли).
Вы можете создать простую оболочку (или расширить существующие методы jQuery)
function safeonload(fn){
$(function(){
try{
fn();
}catch{
//log?
}
});
}
safeonload(doFirst);
safeonload(doSecond);