diff --git a/src/sentry/templates/sentry/js-sdk-loader.js.tmpl b/src/sentry/templates/sentry/js-sdk-loader.js.tmpl index b2f026ac37aedb..4d52346aa8cdb7 100644 --- a/src/sentry/templates/sentry/js-sdk-loader.js.tmpl +++ b/src/sentry/templates/sentry/js-sdk-loader.js.tmpl @@ -32,6 +32,21 @@ queue.data.push(content); }; queue.data = []; + function onError() { + // Use keys as "data type" to save some characters" + queue({ + e: [].slice.call(arguments), + }); + } + function onUnhandledRejection(e) { + queue({ + p: 'reason' in e + ? e.reason + : 'detail' in e && 'reason' in e.detail + ? e.detail.reason + : e, + }); + } function injectSdk(callbacks) { if (injected) { return; @@ -50,14 +65,8 @@ // Once our SDK is loaded _newScriptTag.addEventListener('load', function () { try { - // Restore onerror/onunhandledrejection handlers - only if not mutated in the meanwhile - if (_window[_onerror] && _window[_onerror].__SENTRY_LOADER__) { - _window[_onerror] = _oldOnerror; - } - if (_window[_onunhandledrejection] && - _window[_onunhandledrejection].__SENTRY_LOADER__) { - _window[_onunhandledrejection] = _oldOnunhandledrejection; - } + _window.removeEventListener('error', onError); + _window.removeEventListener('unhandledrejection', onUnhandledRejection); // Add loader as SDK source _window.SENTRY_SDK_SOURCE = 'loader'; var SDK_1 = _window[_namespace]; @@ -186,34 +195,8 @@ queue({ f: f, a: arguments }); }; }); - // Store reference to the old `onerror` handler and override it with our own function - // that will just push exceptions to the queue and call through old handler if we found one - var _oldOnerror = _window[_onerror]; - _window[_onerror] = function () { - // Use keys as "data type" to save some characters" - queue({ - e: [].slice.call(arguments), - }); - if (_oldOnerror) { - _oldOnerror.apply(_window, arguments); - } - }; - _window[_onerror].__SENTRY_LOADER__ = true; - // Do the same store/queue/call operations for `onunhandledrejection` event - var _oldOnunhandledrejection = _window[_onunhandledrejection]; - _window[_onunhandledrejection] = function (e) { - queue({ - p: 'reason' in e - ? e.reason - : 'detail' in e && 'reason' in e.detail - ? e.detail.reason - : e, - }); - if (_oldOnunhandledrejection) { - _oldOnunhandledrejection.apply(_window, arguments); - } - }; - _window[_onunhandledrejection].__SENTRY_LOADER__ = true; + _window.addEventListener('error', onError); + _window.addEventListener('unhandledrejection', onUnhandledRejection); if (!lazy) { setTimeout(function () { injectSdk(onLoadCallbacks); diff --git a/src/sentry/templates/sentry/js-sdk-loader.min.js.tmpl b/src/sentry/templates/sentry/js-sdk-loader.min.js.tmpl index 79fb80c704b0bc..2735aea2764163 100644 --- a/src/sentry/templates/sentry/js-sdk-loader.min.js.tmpl +++ b/src/sentry/templates/sentry/js-sdk-loader.min.js.tmpl @@ -1 +1 @@ -{% load sentry_helpers %}!function(n,e,r,t,a,i,o,c,_,f){for(var p=f,forceLoad=!1,s=0;s-1){p&&"no"===document.scripts[s].getAttribute("data-lazy")&&(p=!1);break}var u=!1,l=[],d=function(n){("e"in n||"p"in n||n.f&&n.f.indexOf("capture")>-1||n.f&&n.f.indexOf("showReportDialog")>-1)&&p&&R(l),d.data.push(n)};function R(o){if(!u){u=!0;var f=e.scripts[0],p=e.createElement(r);p.src=c,p.crossOrigin="anonymous",p.addEventListener("load",(function(){try{n[t]&&n[t].__SENTRY_LOADER__&&(n[t]=E),n[a]&&n[a].__SENTRY_LOADER__&&(n[a]=v),n.SENTRY_SDK_SOURCE="loader";var e=n[i],r=e.init;e.init=function(n){var t=_;for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(t[a]=n[a]);!function(n,e){var r=n.integrations||[];if(!Array.isArray(r))return;var t=r.map((function(n){return n.name}));n.tracesSampleRate&&-1===t.indexOf("BrowserTracing")&&r.push(new e.BrowserTracing);(n.replaysSessionSampleRate||n.replaysOnErrorSampleRate)&&-1===t.indexOf("Replay")&&r.push(new e.Replay);n.integrations=r}(t,e),r(t)},function(e,r){try{for(var i=0;i-1){u&&"no"===document.scripts[p].getAttribute("data-lazy")&&(u=!1);break}var d=!1,l=[],_=function(e){("e"in e||"p"in e||e.f&&e.f.indexOf("capture")>-1||e.f&&e.f.indexOf("showReportDialog")>-1)&&u&&E(l),_.data.push(e)};function v(){_({e:[].slice.call(arguments)})}function h(e){_({p:"reason"in e?e.reason:"detail"in e&&"reason"in e.detail?e.detail.reason:e})}function E(a){if(!d){d=!0;var f=n.scripts[0],u=n.createElement(r);u.src=c,u.crossOrigin="anonymous",u.addEventListener("load",(function(){try{e.removeEventListener("error",v),e.removeEventListener("unhandledrejection",h),e.SENTRY_SDK_SOURCE="loader";var n=e[o],r=n.init;n.init=function(e){var t=s;for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);!function(e,n){var r=e.integrations||[];if(!Array.isArray(r))return;var t=r.map((function(e){return e.name}));e.tracesSampleRate&&-1===t.indexOf("BrowserTracing")&&r.push(new n.BrowserTracing);(e.replaysSessionSampleRate||e.replaysOnErrorSampleRate)&&-1===t.indexOf("Replay")&&r.push(new n.Replay);e.integrations=r}(t,n),r(t)},function(n,r){try{for(var o=0;o