Я использую встроенную функцию WP wp_enqueue_script () для всей загрузки моего скрипта как в WP, так и в бэк-энде, чтобы она могла обрабатывать дублированные вызовы одного и того же скрипта и так далее.

Одна из проблем заключается в том, что другие программисты не используют эту функцию и загружают свои сценарии непосредственно из своего кода, что приводит к двойной загрузке jQuery или jQuery-UI, что приводит к множеству ошибок.

Другая проблема заключается в том, что код, не принадлежащий мне, вызывает ошибку и останавливает выполнение JavaScript после этой точки.

Короче говоря:

Ошибка Javascript в коде, не принадлежащем мне.
Мой код не выполняется из-за этой ошибки.
Я хочу, чтобы мой код обошел эту ошибку и все еще выполняется.
Есть ли способ справиться с этими проблемами?

2
diosney 4 Фев 2013 в 00:33

2 ответа

Лучший ответ
function ShieldAgainThirdPartyErrors($) {
    // Code you want protect here...
}

// First shot.
// If no error happened, when DOMContentLoaded is triggered, this code is executed.
jQuery(ShieldAgainThirdPartyErrors);

// Backup shot.
// If third party script throw or provoke an unhandled exception, the above function 
// call could never be executed, so, lets catch the exception and execute the code.
window.onerror = function () {

    ShieldAgainThirdPartyErrors(jQuery);

    return true;
}

Если вы хотите дважды нажать на курок своего пистолета, просто когда это необходимо;) установите флажок, сигнализирующий о том, что первый выстрел был успешным, и избегайте резервного выстрела, я думаю, что при некоторых обстоятельствах ваш первый выстрел может быть выполнен даже при попадании стороннего кода проблемы и вызвать второй выстрел.

4
user1785721user1785721 6 Фев 2013 в 22:12

Совсем не рекомендуется, но вы можете использовать:

try {  
  //Some code likely to throw an error  
} catch (err) {}

Это позволит что-нибудь продолжить после продолжения работы, хотя вы, как правило, тоже должны отлавливать ошибку. Единственный случай, когда я не уловил ошибку, - это при работе с массивами и выполнении somearray[i-1], где i-1 будет меньше 0. Это только потому, что оно чище, чем использование условных выражений для его предотвращения.

0
James Coyle 4 Фев 2013 в 00:21