Skip to content

Commit 8757a7d

Browse files
author
fishineyuan
committed
add badjs
1 parent 4ede4bc commit 8757a7d

File tree

5 files changed

+54
-0
lines changed

5 files changed

+54
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
- [常见问题](#常见问题)
1010
- [插件列表](Plugins.md)
1111
- [代码检查](代码检查.md)
12+
- [脚本错误排查](badjs.md)
1213

1314
## 卸载老版本node
1415

badjs.md

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
2+
# 脚本错误排查
3+
4+
## 错误栈找源码
5+
6+
进入[badjs监控系统badjs.server.com](http://badjs.server.com)查询到错误栈
7+
8+
![](images/badjs_server.png)
9+
10+
使用Chrome打开来源html页面,在控制台输入`'https://8.url.cn/now/h5/story_3bb6a1b.js?_bid=152:25:1275'`回车,点击生成的链接即可定位到代码位置
11+
12+
![](images/badjs_chrome_1.png)
13+
14+
*注意badjs监控系统中的链接不会有url的参数,控制台定位文件时必须和html请求url完全一致*
15+
16+
点击`{}`可以格式化代码
17+
18+
![](images/badjs_chrome_2.png)
19+
20+
之后虽然是压缩了的代码肯定也是可以知道错误的地方在哪
21+
22+
## `Script error.`处理
23+
24+
badjs通过window.onerror监听脚本错误, 当错误栈中存在跨域资源时err对象将不会携带错误栈, 信息都为`Script error.`
25+
26+
两个解决办法:
27+
- 对跨域资源设置`Access-Control-Allow-Origin`跨域头
28+
- 包裹异步执行入口
29+
30+
### `Access-Control-Allow-Origin`
31+
32+
可以获取到Android设备的错误栈, 但对离线包/IOS有一些问题:
33+
- 离线包尚不支持返回响应头
34+
- IOS有更严格的要求导致在IOS端几乎无效
35+
36+
### 包裹异步执行入口
37+
38+
现在使用`@tencent/badjs-es5`做异步执行入口的自动包裹(浏览器需要支持`Object.defineProperty`)
39+
40+
`@tencent/badjs-es5`自动包裹的入口包括:
41+
- `define`, `require`
42+
- `setTimeout`, `setInterval`
43+
- `Promise.prototype.then`, `Promise.prototype.catch`
44+
-`XMLHttpRequest.prototype.send`中切入包裹其`onreadystatechange`
45+
46+
*有兴趣的同学可以看一下`@tencent/badjs-es5`的源码*
47+
48+
配合`@tencent/badjs-es5`做的手动切入:
49+
- React的ReactEventListener.dispatchEvent, Transaction.Mixin.perform
50+
- mqq的fireCallback
51+
52+
此步骤在`now-lib-trunk.git`公用资源库中完成, 详情请参考它的README.md
53+

images/badjs_chrome_1.png

46.8 KB
Loading

images/badjs_chrome_2.png

32.7 KB
Loading

images/badjs_server.png

34.4 KB
Loading

0 commit comments

Comments
 (0)