1(function () { 2 let hdErrorReport_reloadTriggered = sessionStorage.getItem('hdErrorReport_reloadTriggered') ?? '0'; 3 if (hdErrorReport_reloadTriggered == 1) { 4 sessionStorage.setItem('hdErrorReport_reloadTriggered', '0'); 5 } 6 7 window.addEventListener('error', function(event) { 8 function hderrorreport_isExternalUrl(url) { 9 try { 10 var link = new URL(url, window.location.origin); 11 return link.origin !== window.location.origin; 12 } catch (e) { 13 return false; 14 } 15 } 16 17 let errorData = {}; 18 19 if (event.error) { 20 // JS runtime error 21 errorData = { 22 type: 'js_runtime_error', 23 message: event.error.message || '', 24 stack: event.error.stack || '', 25 filename: event.filename || '', 26 lineno: event.lineno || null, 27 colno: event.colno || null 28 }; 29 } else { 30 // Resource loading error 31 let tagname = (event.target.tagName || '').toLowerCase(); 32 let url = event.target.src || event.target.href || ''; 33 34 errorData = { 35 type: 'resource_loading_error', 36 tagName: tagname, 37 url: url, 38 errorSource: '', 39 external: hderrorreport_isExternalUrl(url), 40 clearCache: false 41 }; 42 43 if (tagname === 'link' && event.target.rel === 'stylesheet') { 44 errorData.errorSource = 'css'; 45 } else if (tagname === 'script') { 46 errorData.errorSource = 'js'; 47 } 48 49 if (!errorData.external && (errorData.errorSource === 'js' || errorData.errorSource === 'css')) { 50 errorData.clearCache = true; 51 } 52 } 53 54 // Send to PHP endpoint 55 fetch('/?eID=error_report_triggered', { 56 method: 'POST', 57 headers: { 'Content-Type': 'application/json' }, 58 body: JSON.stringify(errorData) 59 }) 60 .then(response => response.json()) 61 .then(data => { 62 if (data.reloadPage && hdErrorReport_reloadTriggered == '0') { 63 hdErrorReport_reloadTriggered = 1; 64 sessionStorage.setItem('hdErrorReport_reloadTriggered', '1'); 65 window.location.reload(); 66 } 67 }) 68 .catch(err => { 69 console.error('Error reporting failed:', err); 70 }); 71 72 }, true); 73})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.