# IMDebuggerWindow
**Repository Path**: h5zone/IMDebuggerWindow
## Basic Information
- **Project Name**: IMDebuggerWindow
- **Description**: 远程仓库: https://github.com/imengyu/IMDebuggerWindow
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-01-07
- **Last Updated**: 2025-08-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# IMDebuggerWindow
一款调试工具,方便您在APP上无法连接电脑时查看Console,网络请求,报错,Storage。
## 安装
导入插件后,请在您的代码中安装,让 IMDebuggerWindow 正常运行。
1. 在 `pages.json` 中添加页面:
```json
{
"pages": [
...,
{
"path": "uni_modules/imengyu-IMDebuggerWindow/pages/debugger",
"style": {
"navigationBarTitleText": "调试输出窗口",
"disableScroll": true,
"background": "transparent"
}
}
]
}
```
2. 在 main.js 中安装钩子:
```js
import { debuggerModule } from 'uni_modules/imengyu-IMDebuggerWindow/common/debuggerExtern.js'
const errorHandler = (err, vm, info) => {
if(debuggerModule) debuggerModule.addVueError(err, vm, info);
}
Vue.config.errorHandler = errorHandler;
```
3. 在 App.vue 中安装钩子:
```js
import { debuggerModule, installDebugger } from 'uni_modules/imengyu-IMDebuggerWindow/common/debuggerExtern.js'
export default {
onLaunch: function() {
//这里配置是在调试模式下才开启,您也可以去掉判断,在任何时候都开启
if(process.env.NODE_ENV === 'development')
installDebugger({
enableRequestInterceptor: false //默认为false,指示是否拦截网络请求,参见下一条
showGlobalFloatWindow: true //默认为true,指定是否添加一个全局的调试按钮,点击可跳转至窗口
});
},
onUnhandledRejection: function(err) {
if(debuggerModule) debuggerModule.addAppErr(err);
},
onError: function(err) {
if(debuggerModule) debuggerModule.addAppErr(err);
}
}
```
4. 设置自定义网络日志
* 如果您在 installDebugger 中指定了 enableRequestInterceptor: true ,则默认会拦截 uni.request 并将其请求信息输出至窗口。
* 假如您使用第三方请求库进行请求,则无法拦截到请求,您可以在自己的第三方请求库中设置拦截器,然后调用 IMDebuggerWindow 的 addNetworkLog 将其输出至调试窗口。例如下面是axois的拦截器示例:
```js
import { debuggerEnabled, debuggerModule } from 'uni_modules/imengyu-IMDebuggerWindow/common/debuggerExtern.js'
instance.interceptors.response.use(
response => {
if(debuggerEnabled())
debuggerModule.addNetworkLog({
url: response.config.url,
method: response.config.method,
sourceUrl: response.config.url,
status: response.status,
},
response.config,//请求数据,将显示在Option字段中
response.data//返回数据,将显示在Data字段中
)
return response
},
error => {
if(debuggerEnabled())
debuggerModule.addAppErr(error) //可输出错误至错误窗口
return Promise.reject(error.response.status) // 返回接口返回的错误信息
}
)
```
5. 如果您在 App/H5 模式运行,则会自动在页面上添加一个红色的“调试”按钮,默认位于左下角。假如您运行在小程序或其他平台,则无法自动添加全局按钮。您可以在自己的页面上添加按钮,在按钮中调用 showDebuggerWindow API 来手动显示窗口:
```js
import { showDebuggerWindow } from 'uni_modules/imengyu-IMDebuggerWindow/common/debuggerExtern.js'
onClick() {
showDebuggerWindow(); //显示调试窗口
}
```
## 组件式调试窗口
默认情况下,uniapp 无法添加一个全局的弹出框,IMDebuggerWindow实现是采用一个全局页面,点击“调试”按钮,会跳转至页面,从而达到显示一个虚假“弹出框”的效果。
这种页面是不能边交互边看日志的,需要返回再打开,很麻烦。
IMDebuggerWindow还有一个组件化调试输出窗口,可以在您的页面上弹出,并可以调整大小,方便您边交互边看日志,示例代码如下:(也可参考示例项目中的示例)
```vue
```
你可以在自己项目的公共组件中包括上面的调试窗口代码,然后在一个按钮中打开,这样每个页面都可以弹出调试器了。
## API
* `installDebugger(options): void` 安装调试窗口以及拦截器,推荐在 App.vue 中安装。
* options 参数:
* `enableRequestInterceptor: boolean` 默认 false, 指示是否拦截uni.request网络请求,为false时需要手动记录网络请求数据。
* `showGlobalFloatWindow: boolean` 默认为true,指定是否在全局页面左下角添加一个的调试按钮,点击可跳转至窗口
* `showDebuggerWindow(): void` 手动显示调试窗口。
* `debuggerEnabled(): boolean` 获取当前调试窗口是否已经安装
* `debuggerModule` 调试日志模块,包含一些方法可供手动写入日志,如下:
* `addNetworkLog(info, options, data) : void` 添加网络请求日志。日志显示在 Network 中。
* info 包含当前请求的信息,调试器窗口中主要显示如下字段:
* method: string 当前请求的方法
* sourceUrl: string 当前请求来源URL
* url: string 当前请求URL
* status: number 当前请求状态码
* options 当前请求的参数
* data 当前请求返回的数据
* `addAppErr(err : Error) : void` 添加报错日志。日志显示在 Error 中。
* `addLog(info) : void` 手动添加console日志。
* info 包含日志信息,调试器窗口中主要显示如下字段:
* time: string 日志发生时间
* type: 'log'|'info'|'warn'|'error' 日志等级
* objects: ...object 这个字段是 console.log(...) 中的参数,调试器会自动解析并显示它。