Public
Script
Readme

Catch

This val is a helper for Townie, which sends client-side errors up to the top frame so that Townie can assist you in fixing them.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Custom error logger
function logError(error, errorType) {
var errorMessage = error.message || error.toString();
var errorSource = error.fileName || error.sourceURL || error.src || "unknown";
var errorLine = error.lineNumber || error.line || "unknown";
var errorColumn = error.columnNumber || error.column || "unknown";
console.error("Caught error:", errorType, errorMessage);
window.top.postMessage({
type: "error",
errorType: errorType,
message: errorMessage,
source: errorSource,
line: errorLine,
column: errorColumn,
}, "*");
}
// Catch general JavaScript errors
window.addEventListener("error", function(event) {
// Check if the error is a script loading error
if (event.target && event.target.tagName === "SCRIPT") {
logError({
message: "Failed to load script",
src: event.target.src,
}, "scriptLoadError");
} else {
logError(event, "runtime");
}
return false; // Let the error propagate
}, true); // Use capturing to catch script errors
// Handle unhandled promise rejections
window.addEventListener("unhandledrejection", function(event) {
logError(event.reason, "unhandledRejection");
});
// Catch and log any errors that occur during script execution
document.addEventListener("error", function(event) {
if (event.target && event.target.tagName === "SCRIPT") {
logError({
message: "Script execution error",
src: event.target.src,
}, "scriptExecutionError");
}
}, true); // Use capturing to catch the error before it reaches the window object
// Override createElement to catch dynamic script loading errors
var originalCreateElement = document.createElement;
document.createElement = function() {
var element = originalCreateElement.apply(this, arguments);
if (arguments[0].toLowerCase() === "script") {
element.addEventListener("error", function(event) {
logError({
message: "Failed to load dynamically added script",
src: event.target.src,
}, "dynamicScriptLoadError");
});
}
return element;
};
Val Town is a social website to write and deploy JavaScript.
Build APIs and schedule functions from your browser.
Comments
Nobody has commented on this val yet: be the first!
September 13, 2024