window.onerror, переопределенный сторонней библиотекой - как отследить это, чтобы переустановить мой обработчик обратно?

1

На нашем веб-сайте мы хотим отслеживать всю ошибку 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() но я думаю, что это плохое решение. Я ищу "естественный" способ, если хотите - подписаться на уведомление или что-то в этом роде.

Теги:

2 ответа

2

Если вы хотите, чтобы никто не заменил вашу функцию, вы можете вместо этого использовать addEventListener.

window.addEventListener('error', sendError)
  • 0
    будет ли тогда работать другая функция?
  • 0
    Да, window.onerror от другой третьей стороны тоже будет работать. Но я думаю, что они могли бы также использовать addEventListener, чтобы больше не было таких проблем
0

Я бы предложил вам загрузить скрипт с чем-то вроде jQuery $.getScript, это позволит вам иметь обратный вызов после того, как скрипт будет полностью загружен и включен в DOM.

$.getScript( "//js.hs-scripts.com/hs.js" )
  .done(function( script, textStatus ) {
    alert("Success!");
  })
  .fail(function( jqxhr, settings, exception ) {
    alert("Fail");
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню