Files
x_admin/x_error_sdk/x-log-browser.ts
2024-10-31 01:12:07 +08:00

161 lines
4.0 KiB
TypeScript

import type { LogWithError, LogWithEnv, ListenCallbackFn } from "./types";
export function upload(url: string, data: object[]) {
return new Promise(() => {
try {
let h = new Image();
h.onerror = function (event) {
var e = event as Event;
e.preventDefault();
};
h.onload = function () {};
h.src = url + "?data=" + encodeURIComponent(JSON.stringify(data));
} catch (error) {}
});
}
export function setCache(key: string, info: any) {
localStorage.setItem(key, JSON.stringify(info));
}
export function getCache(key: string): any {
try {
let list = localStorage.getItem(key);
if (list) {
return JSON.parse(list);
} else {
return null;
}
} catch (error) {
return null;
}
}
export function delCache(key: string) {
localStorage.removeItem(key);
}
// 获取环境信息
export function getEnvInfo(): LogWithEnv {
const env: LogWithEnv = {
Type: "env",
ScreenHeight: 0,
ScreenWidth: 0,
};
// navigator对象数据
if (window ) {
env.ScreenHeight = window.innerHeight || 0; // 获取显示屏信息
env.ScreenWidth = window.innerWidth || 0;
}
return env;
}
export function listenError(callback: ListenCallbackFn) {
window.addEventListener(
"error",
(err: any) => {
console.error(err);
let target = err.target;
if (target?.localName) {
if (target?.localName == "img" || target?.localName == "script") {
// errorResources(target?.localName, target.src);
callback({
Type: "resources",
EventType: target?.localName,
Path: target.src,
Message:'',
Stack: "",
});
} else if (target?.localName == "link") {
// errorResources(target?.localName, target.href);
callback({
Type: "resources",
EventType: target?.localName,
Path: target.href,
Message:'',
Stack: "",
});
}
} else {
// errorLog(err.type, err.message, err.error?.stack || "");
callback({
Type: "error",
EventType: err.type,
Path:window.location.href,
Message: err.message,
Stack: err.error?.stack || "",
});
}
},
true
);
window.addEventListener("unhandledrejection", (err) => {
if (typeof err.reason == "string") {
// errorLog(err.type, err.reason, "");
callback({
Type: "error",
EventType: err.type,
Path:window.location.href,
Message: err.reason,
Stack: "",
});
} else if (typeof err.reason == "object") {
// errorLog(err.type, err.reason?.message || "", err.reason?.stack || "");
callback({
Type: "error",
EventType: err.type,
Path:window.location.href,
Message: err.reason?.message || "",
Stack: err.reason?.stack || "",
});
}
});
}
// export function listenBehavior(eventLog: EventLog) {
// window.addEventListener("click", (e) => {
// let target = e.target as HTMLElement;
// let tagName = target?.localName;
// let name = [tagName];
// if (target.id) {
// name.push("#" + target.id);
// }
// target.classList.forEach((item) => {
// name.push("." + item);
// });
// if (target.innerText) {
// name.push(":" + target.innerText);
// }
// eventLog("click", name.join(""));
// });
// window.addEventListener("hashchange", (e) => {
// eventLog("pageChange", e.newURL);
// });
// eventLog("pageChange", window.location.href);
// }
export function listen(callback: ListenCallbackFn) {
listenError((params: LogWithError) => {
if (params.Stack) {
let newStack: string[] = [];
params.Stack.split("\n").map((item, index) => {
if (index < 4) {
newStack.push(item);
}
});
params.Stack = newStack.join("\n");
}
callback(params);
});
}
export default {
getEnvInfo,
listenError,
upload,
getCache,
setCache,
delCache,
listen,
};