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?
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.
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
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.
"Script error" probably means that the issue is with an attempt at executing a script from an external domain.
You don't have information on the line number and error details because it's not on your page.
It's covered pretty extensively in the answers to this question.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With