I'm trying to rewrite an vanilla ES5 closure to a ES2015 Class. The code overrides the window.onerror function and acts as a global error handler method for logging purposes.
My old code looks like this. I would like to know how to rewrite it in ES2015. How do i override the Window.onerror?
(function() {
window.onerror = function(errorMessage, url, line) {
try {
if (typeof(url) === "undefined") {
url = "";
}
if (typeof(line) === "undefined") {
line = "";
}
// Avoid error message being too long...
if (errorMessage.length > 300) {
errorMessage = errorMessage.slice(0,300) + "...";
}
errorMessage = errorMessage.replace(/&/g, "%26").replace(/ /g, "+");
url = url;
line = line;
var parentUrl = encodeURIComponent(document.location.href);
// Set error details
var parameters = "error_message=" + errorMessage +
"&url=" + url +
"&line=" + line +
"&parent_url=" + parentUrl;
// Set path to log target
var logUrl = "xxx";
// Set error details as image parameters
new Image().src = logUrl + '?' + parameters;
} catch (e) {}
};
}());
EDIT!
Now I'm trying to rewrite it in a JS Class. So I guess I have to extend the Window class or something like that (I have a Java background). But Window is not a class as I understand. This is what I have so far.
So I need help to override the window.onerror function, written in ES2015!
export const Logging = new class {
constructor() {
// todo
}
onerror(errorMessage, url, line) {
try {
if (typeof(url) === "undefined") {
url = "";
}
if (typeof(line) === "undefined") {
line = "";
}
// truncate error message if necessary
if (errorMessage.length > 300) {
errorMessage = errorMessage.slice(0,300) + "...";
}
// URI encoding
errorMessage = errorMessage.replace(/&/g, "%26").replace(/ /g, "+");
url = url;
line = line;
var parentUrl = encodeURIComponent(document.location.href);
// set error details
var parameters = "error_message=" + errorMessage +
"&url=" + url +
"&line=" + line +
"&parent_url=" + parentUrl;
// Set path to log target
var logUrl = "xxx";
// set error details as image parameters
var img = new Image().src = logUrl + '?' + parameters;
console.log(img);
}
catch (e) {}
}
}
/* ------------------------------------------------------------------------------------------------------------ */
export default Logging;