跳转到内容

调试 App 内页面(WebView / WKWebView)

浏览器标签页属于较简单的情形,真正容易出现问题的是嵌入在混合应用中的页面。WebDebugX 会将这类页面与浏览器标签页一并列出,并使用同一个检查器打开 —— 前提是应用一侧已开启调试。

在应用启动的早期阶段(Application 或承载 WebView 的 Activity)调用一次:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}

Kotlin:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true)
}

重新打包并安装到设备上,然后参照调试 Android 操作,WebView 页面即会出现在页面列表中。

每个承载 WebView 的进程会各自暴露一个调试端点。如需手动排查:

Terminal window
adb shell ps | grep webview # 有 WebView 的进程
adb shell pgrep -f com.example.app # 指定 App 的 PID

WebDebugX 会自动枚举这些端点,上述命令仅用于确认设备一侧是否正常。

在 web view 上开启检查功能。自 iOS 16.4 起,该能力由一个显式属性控制:

if #available(iOS 16.4, *) {
webView.isInspectable = true
}

在 iOS 16.4 之前,Debug 构建的应用无需额外代码即可被检查,Release 构建则不可以。

随后参照调试 iOS 操作,应用内的页面即会与 Safari 标签页一并列出。

  1. 确认设备上安装的是已开启该开关的版本。 请重新安装一次 —— 未开启开关的旧版本从外部无法分辨。
  2. 确认 WebView 已在屏幕上显示。 尚未创建的页面不会暴露任何调试目标。
  3. 确认已刷新设备列表。 该开关不会追溯生效,请在 WebDebugX 中点击刷新
  4. 确认是同一个应用。 部分应用包含多个进程,页面归属于创建该 WebView 的那个进程。
  5. 与平台原生工具对照。 如果 chrome://inspect 或 Safari 的「开发」菜单同样无法看到该页面,说明开关未生效,问题出在应用一侧。