Skip to content

fix(desktop): 修复首次 WebView 黑屏 - #17

Merged
generalio merged 1 commit into
mainfrom
generalio/fix/desktop-initial-paint
Aug 7, 2026
Merged

fix(desktop): 修复首次 WebView 黑屏#17
generalio merged 1 commit into
mainfrom
generalio/fix/desktop-initial-paint

Conversation

@generalio

Copy link
Copy Markdown
Owner

目的

修复 macOS Compose Desktop 中 windowed JCEF 首次进入 WebView 黑屏、调整窗口大小后才显示的问题。保持 JCEF windowed 模式,不修改 Android、iOS、JS/Wasm 行为。

改动内容

  • 在浏览器已创建、Swing 组件已 showing 且尺寸有效时,于 Swing EDT 按 revalidate → paintImmediately → repaint 同步一次原生视图布局,触发 JCEF 的 JPanel.paint()doUpdate() 与原生子窗口绑定。
  • 保留一次性同步、HierarchyListener 移除及既有 stopLoad → setCloseAllowed → close(false) 关闭流程。
  • 新增 DesktopWebViewRuntime.prepareComposeInterop();仅 macOS 且宿主未设置 compose.interop.blending 时写入 trueinitialize() 保留兼容性兜底调用。
  • 更新 Desktop 示例、使用指南与架构说明;补充首次布局协调器和互操作属性的单元测试。
  • 公共 API 为新增方法,JVM API 基线已更新,不破坏既有二进制调用。

平台影响

  • Android:无代码或行为改动。
  • iOS:无代码或行为改动。
  • Desktop:修复 macOS windowed JCEF 首次挂载黑屏;新增建议的启动前互操作准备 API。
  • JS/Wasm:无代码或行为改动。

验证命令与结果

  • ./gradlew :webview-desktop:test :webview-compose:jvmTest --stacktrace --console=plain --no-configuration-cache:通过。
  • ./gradlew :sample-compose:desktopTest --stacktrace --console=plain --no-configuration-cache:通过。
  • ./gradlew :webview-compose:jvmApiCheck --stacktrace --console=plain --no-configuration-cache:通过。
  • ./gradlew apiCheck --stacktrace --console=plain --no-configuration-cache:受本机缺少 xcodebuild 阻断,失败于既有 :webview-ios:cinteropMultiWebFileChooserIosArm64xcrun exit 72;与本次 Desktop 改动无关。
  • macOS Desktop 示例已启动至 JCEF 初始化,首帧可见性由仓库所有者人工确认通过。

风险与兼容性

  • 同步绘制只在浏览器创建完成、视图可见且尺寸有效时执行一次,不切换 OSR,也不在 Compose 重组中强制重绘。
  • prepareComposeInterop() 为新增公开 API;不覆盖宿主显式的全局 Compose 设置,旧接入方仍可只调用 initialize()
  • 不涉及 JavaScript 桥、Cookie、文件访问或外部导航策略。

文档变更

  • 更新 docs/使用指南.mddocs/架构说明.md,说明 macOS 推荐调用时机、一次性即时绘制行为与兼容性兜底。

Copilot AI lite review requested due to automatic review settings August 7, 2026 13:33

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@generalio
generalio merged commit 3ac989c into main Aug 7, 2026
2 checks passed
@generalio
generalio deleted the generalio/fix/desktop-initial-paint branch August 7, 2026 13:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants