На нашем веб-сайте мы хотим отслеживать всю ошибку JS с помощью библиотеки stacktracejs. Это очень просто установить, и мы делаем это в <head>
:
window.onerror = function(msg, file, line, col, error) {
// callback is called with an Array[StackFrame]
StackTrace.fromError(error).then(callback).catch(errback);
};
то мы добавляем код отслеживания Hubspot в нижнем колонтитуле следующим образом:
<script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/hs.js"></script>
обратите внимание на async
и defer
- и в некоторый, неизвестный момент времени скрипт Hubspot берет на себя (переназначает их функцию) window.onerror
- без учета MY-функции. Это ошибка, из которой я понимаю, и она сообщила на своем сайте: https://integrate.hubspot.com/t/tracking-code-overrides-window-onerror/1755
Мой вопрос: возможно ли отслеживать, что определение функции было переопределено? Я понимаю, что могу сделать settimeout()
но я думаю, что это плохое решение. Я ищу "естественный" способ, если хотите - подписаться на уведомление или что-то в этом роде.
Если вы хотите, чтобы никто не заменил вашу функцию, вы можете вместо этого использовать addEventListener
.
window.addEventListener('error', sendError)
Я бы предложил вам загрузить скрипт с чем-то вроде jQuery $.getScript, это позволит вам иметь обратный вызов после того, как скрипт будет полностью загружен и включен в DOM.
$.getScript( "//js.hs-scripts.com/hs.js" )
.done(function( script, textStatus ) {
alert("Success!");
})
.fail(function( jqxhr, settings, exception ) {
alert("Fail");
});