function _isNoiseError(message, source, stack) { message = String(message || ''); source = String(source || ''); stack = String(stack || ''); var all = message + ' ' + source + ' ' + stack; if (message === 'Script error.' && !source) return true; if (/-extension:\/\//.test(all)) return true; if (message.indexOf('__firefox__') !== -1) return true; if (message.indexOf('has already been declared') !== -1) return true; if (message.indexOf('ResizeObserver loop') !== -1) return true; if (/\b(x|sw)browser is not defined\b/i.test(message)) return true; if (/\b(execute_auto_fill|needInjectCss)\b/.test(all)) return true; if (message.indexOf('@context') !== -1) return true; return false; } window.onerror = function(message, source, lineno, colno, error) { if (_isNoiseError(message, source, error && error.stack)) return false; fetch('/api/accounts/log-error/', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': document.querySelector('[name=csrfmiddlewaretoken]')?.value || '' }, body: JSON.stringify({ message: message, source: source, lineno: lineno, colno: colno, stack: error?.stack || '', url: window.location.href }) }).catch(function() {}); return false; }; window.addEventListener('unhandledrejection', function(event) { var _reason = (event.reason && event.reason.message) || event.reason || ''; var _rstack = (event.reason && event.reason.stack) || ''; if (!_reason || _isNoiseError(_reason, '', _rstack)) return; fetch('/api/accounts/log-error/', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': document.querySelector('[name=csrfmiddlewaretoken]')?.value || '' }, body: JSON.stringify({ message: 'Unhandled Promise Rejection: ' + (event.reason?.message || event.reason || 'Unknown'), source: 'promise', lineno: 0, colno: 0, stack: event.reason?.stack || '', url: window.location.href }) }).catch(function() {}); });