Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
165
rated 0 times [  167] [ 2]  / answers: 1 / hits: 71809  / 7 Years ago, thu, june 29, 2017, 12:00:00

I have an event handler that looks like this:



window.addEventListener('error', function (e) {

SendLogErrorToServer('Error: ' + e.message +
'Error object: ' + JSON.stringify(e) +
'Script: ' + e.filename +
'Line: ' + e.lineno +
'Col: ' + e.colno +
'Nav: ' + window.navigator.userAgent));

}, false);


The problem is that what I receive looks like this:



Error: Script error.Error object: {isTrusted:true} Script: Line: 0 Col: 0 Nav: Mozilla/5.0


As you can see, no line number or error message that's useful. What do I need to change to get the line number and error details?


More From » exception

 Answers
21

There are two points you need to be aware of in this case. Both points are independent of each other and should be fixed to solve your problem.


First


The error you're facing is a special type of errors called Script Error



“Script error” is what browsers send to the onerror callback when an
error originates from a JavaScript file served from a different origin
(different domain, port, or protocol). It’s painful because even
though there’s an error occurring, you don’t know what the error is,
nor from which code it’s originating.



This isn’t a JavaScript bug



Browsers intentionally hide errors
originating from script files from different origins for security
reasons. It’s to avoid a script unintentionally leaking potentially
sensitive information to an onerror callback that it doesn’t control.
For this reason, browsers only give window.onerror insight into errors
originating from the same domain. All we know is that an error
occurred – nothing else!



To fix this problem:


To fix and get a normal error object, Check this blog post


Second


When you try to stringify any Error Object, the result will not be satisfying at all because you will lose almost all data.


The reason for that


JSON.stringify deals only with enumerable properties but Error object stores the contextual data in inenumerable properties.


To fix this problem


There are number of solutions but this one could be straight forward


JSON.stringify(err, ["message", "arguments", "type", "name"])

This picks the properties you want and generate the string for you.


[#57270] Monday, June 26, 2017, 7 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
bryonk

Total Points: 161
Total Questions: 116
Total Answers: 107

Location: Albania
Member since Sun, Nov 22, 2020
4 Years ago
bryonk questions
;