已开启
[Bug] br_rnoh0.77 PDF 加载与页面交互异常 #71
SailFlorve创建于  7 天前
SailFlorve
7 天前 创建

问题描述

HarmonyOS 实现中的 PDF 远程加载、页面单击事件和 NativeModule 兼容性存在以下问题:

  1. 下载任务失败时 Promise 未结束,组件永久停留在 loading 状态。
  2. onPageSingleTap 没有触发。
  3. HTTP://HTTPS:// 等大写协议头的 PDF URL 无法加载。
  4. HarmonyOS 未注册 PdfManager NativeModule 时,调用 PdfManager.loadFile 会同步抛出 TypeError
  5. HTTP 4xx/5xx 响应被当作下载完成处理,错误响应体会被继续交给 PDF 解析器。
  6. HarmonyOS 无法加载 data:application/pdf;base64,... 格式的 PDF。

复现步骤

  1. 使用 PdfView 加载不可访问或下载失败的 HTTP(S) PDF 地址,观察加载状态和 onError 回调。
  2. 加载任意可正常显示的 PDF,使用单指点击页面,观察 onPageSingleTap 回调。
  3. source.uri 设置为 HTTPS://...HTTP://...,加载 PDF,观察网络识别和下载结果。
  4. 在未注册 HarmonyOS PdfManager NativeModule 的工程中调用 PdfManager.loadFile(...),观察 JS 引擎和应用启动结果。
  5. 请求返回 HTTP 404/500 的 PDF 地址,观察 onError 是否携带明确下载失败信息。
  6. source.uri 设置为合法的 base64 PDF 数据,观察 PDF 是否能加载。

预期结果

  • 下载失败时及时结束加载流程并触发错误处理,不应永久处于 loading 状态。
  • 单指点击 PDF 页面时触发 onPageSingleTap,并传递页码和点击坐标。
  • HTTP/HTTPS scheme 大小写均可识别,下载请求符合 HarmonyOS SDK 参数要求。
  • 未注册或不支持的 NativeModule 调用以可处理的 Promise rejection 返回,不应同步抛错或导致应用红屏。
  • HTTP 4xx/5xx 响应通过 onError 返回下载失败,不应继续按 PDF 文件解析。
  • base64 PDF 能被解码并加载。

实际结果

  • 下载失败后组件永久处于加载状态。
  • onPageSingleTap 永远不触发。
  • 大写协议头 URL 被错误识别或被 HarmonyOS 下载 API 拒绝,典型日志为 Parameter verification failed, the url should start with http(s)://
  • PdfManager.loadFile 在 NativeModule 缺失时同步抛出 TypeError,可能导致 Invariant Violation: "app_name" has not been registered
  • HTTP 404/500 响应被保存后进入 PDF 解析流程,最终表现为解析失败或错误信息不明确。
  • base64 PDF 被拒绝加载。

复现概率

必现(100%,网络场景需设备可访问测试地址)。

环境信息

  • React Native OHOS / RNOH:br_rnoh0.77
  • 库版本:@react-native-ohos/react-native-pdf@6.7.6-beta.2
  • 平台:HarmonyOS/OpenHarmony 真机
  • 验证工程:RNT PDF 功能与异常用例

DEMO

import Pdf from '@react-native-ohos/react-native-pdf';

<Pdf
  source={{ uri: 'HTTPS://example.invalid/sample.pdf' }}
  onPageSingleTap={(page, x, y) => {
    console.info('page single tap', page, x, y);
  }}
/>
<Pdf source={{ uri: 'data:application/pdf;base64,JVBERi0xLjQ...' }} />
import PdfManager from './PdfManager';

await PdfManager.loadFile('/data/storage/el2/base/files/sample.pdf');

影响范围

影响 HarmonyOS 上远程 PDF、base64 PDF、页面单击事件和 PdfManager 调用场景,可能导致 PDF 无法加载、加载界面永久卡住、页面点击功能不可用或 NativeModule 缺失时应用直接启动失败。

likedislike
SSailFlorve
7 天前 关联了pull request:fix(harmony): 修复 PDF 加载与页面交互异常