window.onerror被第三方库覆盖 - 如何跟踪以重新安装我的处理程序?

时间:2018-02-07 16:41:50

标签: javascript

在我们的网站上,我们希望使用stacktracejs库跟踪所有JS错误。安装起来非常简单,我们在<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>

注意asyncdefer - 在某些未知的时间点,Hubspot的脚本接管(重新分配给他们的功能)window.onerror - 不考虑我的功能。根据我的理解,这是一个错误,并在其网站上报告:https://integrate.hubspot.com/t/tracking-code-overrides-window-onerror/1755

我的问题是 - 是否有可能以某种方式跟踪功能定义被覆盖?我知道我可以做settimeout(),但我认为这是一个穷人的解决方案。如果你愿意,我正在寻找“自然”的方式 - 订阅通知或类似的东西。

2 个答案:

答案 0 :(得分:3)

如果您希望没有人替换您的功能,您可以使用addEventListener代替。

window.addEventListener('error', sendError)

答案 1 :(得分:0)

我建议您使用jQuery $ .getScript下载脚本,这样一旦脚本完全下载并包含在DOM中,就可以进行回调。

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