# 使用Devtools工具调试前端页面 Web组件支持使用DevTools工具调试前端页面。DevTools是一个 Web前端开发调试工具,提供了电脑上调试移动设备前端页面的能力。开发者通过[setWebDebuggingAccess()](../reference/apis-arkweb/js-apis-webview.md#setwebdebuggingaccess)接口开启Web组件前端页面调试能力,利用DevTools工具可以在电脑上调试移动设备上的前端网页,设备需为4.1.0及以上版本。 使用DevTools工具,可以执行以下步骤: 1. 在应用代码中开启Web调试开关,具体如下: ```ts // xxx.ets import { webview } from '@kit.ArkWeb'; @Entry @Component struct WebComponent { controller: webview.WebviewController = new webview.WebviewController(); aboutToAppear() { // 配置Web开启调试模式 webview.WebviewController.setWebDebuggingAccess(true); } build() { Column() { Web({ src: 'www.example.com', controller: this.controller }) } } } ``` 2. 开启调试功能需要在DevEco Studio应用工程hap模块的module.json5文件中增加如下权限,添加方法请参考[在配置文件中声明权限](../security/AccessToken/declare-permissions.md)。 ``` "requestPermissions":[ { "name" : "ohos.permission.INTERNET" } ] ``` 3. 将设备连接上电脑,在电脑端配置端口映射,配置方法如下: ``` //查找 devtools 远程调试所需的 domain socket 名称,该名称与进程号有关,重启调试应用后,需要重复此步骤,以完成端口转发 cat /proc/net/unix | grep devtools // 添加映射 [pid] 替换成实际的进程id hdc fport tcp:9222 localabstract:webview_devtools_remote_[pid] // 查看映射 hdc fport ls 示例: hdc shell cat /proc/net/unix | grep devtools //显示 webview_devtools_remote_3458 exit hdc fport tcp:9222 localabstract:webview_devtools_remote_3458 hdc fport ls ``` 4. 在电脑端Chrome浏览器地址栏中输入chrome://inspect/\#devices,页面识别到设备后,就可以开始页面调试。调试效果如下: **图1** 页面调试效果图 ![debug-effect](figures/debug-effect.png) 5. 多应用调试请在调试地址内Devices中的configure添加多个端口号以同时调试多个应用: **图2** 添加端口号效果图 ![debug-effect](figures/debug-domains.png) 6. windows便捷脚本,请复制以下信息建立bat文件,开启调试应用后执行: ``` @echo off setlocal enabledelayedexpansion :: Initialize port number and PID list set PORT=9222 set PID_LIST= :: Get the list of all forwarded ports and PIDs for /f "tokens=2,5 delims=:_" %%a in ('hdc fport ls') do ( if %%a gtr !PORT! ( set PORT=%%a ) for /f "tokens=1 delims= " %%c in ("%%b") do ( set PID_LIST=!PID_LIST! %%c ) ) :: Increment port number for next application set temp_PORT=!PORT! set /a temp_PORT+=1 set PORT=!temp_PORT! :: Get the domain socket name of devtools for /f "tokens=*" %%a in ('hdc shell "cat /proc/net/unix | grep devtools"') do ( set SOCKET_NAME=%%a :: Extract process ID for /f "delims=_ tokens=4" %%b in ("!SOCKET_NAME!") do set PID=%%b :: Check if PID already has a mapping echo !PID_LIST! | findstr /C:" !PID! " >nul if errorlevel 1 ( :: Add mapping hdc fport tcp:!PORT! localabstract:webview_devtools_remote_!PID! if errorlevel 1 ( echo Error: Failed to add mapping. pause exit /b ) :: Add PID to list and increment port number for next application set PID_LIST=!PID_LIST! !PID! set temp_PORT=!PORT! set /a temp_PORT+=1 set PORT=!temp_PORT! ) ) :: If no process ID was found, prompt the user to open debugging in their application code and provide the documentation link if "!SOCKET_NAME!"=="" ( echo No process ID was found. Please open debugging in your application code using the corresponding interface. You can find the relevant documentation at this link: [https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/web/web-debugging-with-devtools.md] pause exit /b ) :: Check mapping hdc fport ls echo. echo Script executed successfully. Press any key to exit... pause >nul :: Try to open the page in Edge start msedge chrome://inspect/#devices.com :: If Edge is not available, then open the page in Chrome if errorlevel 1 ( start chrome chrome://inspect/#devices.com ) endlocal ``` 7. mac/linux便捷脚本,请复制以下信息建立sh文件,请自行注意chmod以及格式转换,开启调试应用后执行: ``` #!/bin/bash # Initial port number INITIAL_PORT=9222 # Get the current port number, use initial port number if not set previously CURRENT_PORT=${PORT:-$INITIAL_PORT} # Get the list of all PIDs that match the condition PID_LIST=$(hdc shell cat /proc/net/unix | grep webview_devtools_remote_ | awk -F '_' '{print $NF}') if [ -z "$PID_LIST" ]; then echo "Failed to retrieve PID from the device" exit 1 fi # Increment the port number PORT=$CURRENT_PORT # Forward ports for each application one by one for PID in $PID_LIST; do # Increment the port number PORT=$((PORT + 1)) # Execute the hdc fport command hdc fport tcp:$PORT localabstract:webview_devtools_remote_$PID # Check if the command executed successfully if [ $? -ne 0 ]; then echo "Failed to execute hdc fport command" exit 1 fi done # List all forwarded ports hdc fport ls ```