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,
}, "*");
}
window.addEventListener("error", function(event) {
if (event.target && event.target.tagName === "SCRIPT") {
logError({
message: "Failed to load script",
src: event.target.src,
}, "scriptLoadError");
} else {
logError(event, "runtime");
}
return false;
}, true);
window.addEventListener("unhandledrejection", function(event) {
logError(event.reason, "unhandledRejection");
});
document.addEventListener("error", function(event) {
if (event.target && event.target.tagName === "SCRIPT") {
logError({
message: "Script execution error",
src: event.target.src,
}, "scriptExecutionError");
}
}, true);
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;
};