如何使用浏览器js解析sourcemap



在android logcat中,我预计android webview会用typescript源代码引发js错误,下面是我的示例代码

testdraft.ts

window.onerror = (message, file, line, column, err) => {
if (err !== undefined) {
(window as any).mapStackTrace(err.stack, (mappedStack:any) => {
console.log(mappedStack)
})
}
}
var m = () => {
throw new Error("pr")
}
m()

testdraft.js.map

{"version":3,"file":"testdraft.js","sourceRoot":"","sources":["testdraft.ts"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;IAClD,IAAI,GAAG,KAAK,SAAS,EAAE;QAClB,MAAc,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,WAAe,EAAE,EAAE;YACzD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;KACL;AACL,CAAC,CAAA;AAED,IAAI,CAAC,GAAG,GAAG,EAAE;IACT,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAA;AACD,CAAC,EAAE,CAAA"}

如何解析testdraft.js.map?

我知道chrome://inspect可以调试android webview,但我希望android logcat也能用typescript源代码进行回溯,用于应用程序生产阶段分析

我发现"stacktrace js";可以将bundle stacktrace转换为源stacktrace(或者您可以制作自己的源映射解析器(

参见以下内容:

testdraft.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<!--<script src="../node_modules/sourcemapped-stacktrace/dist/sourcemapped-stacktrace.js"></script>-->
<script src="../node_modules/stacktrace-js/dist/stacktrace.js"></script>
<script src="./testdraft.js"></script>
</body>
</html>

testdraft.ts

window.onerror = (message, file, line, column, err) => {
if (err !== undefined) {
(window as any).StackTrace.fromError(err).then((err: any) => {
console.log(err.join("n"))
}).catch(() => {
})
}
}
var m = () => {
throw new Error("pr")
}
m()

使用tsc编译testdraft.ts到testdraft.js+testdraft.js.map并运行testdraft.html

因此android的webview解决方案是,在pageStated中使用webview运行js-load-stacktrace-js和以下代码:

window.onerror = (message, file, line, column, err) => {
if (err !== undefined) {
(window as any).StackTrace.fromError(err).then((err: any) => {
console.log(err.join("n"))
}).catch(() => {
})
}
}

或者更好的方法,不要在代码之上使用webview api运行,在bundle.js中使用webpack prepend在代码之上首先使用

最新更新