HarmonyOS 实现中的 PDF 远程加载、页面单击事件和 NativeModule 兼容性存在以下问题:
onPageSingleTap
HTTP://
HTTPS://
PdfManager
PdfManager.loadFile
TypeError
react-native-blob-util
getConstants
data:application/pdf;base64,...
PdfView
onError
source.uri
HTTPS://...
HTTP://...
PdfManager.loadFile(...)
Parameter verification failed, the url should start with http(s)://
Invariant Violation: "app_name" has not been registered
必现(100%,网络场景需设备可访问测试地址)。
br_rnoh0.72
@react-native-ohos/react-native-pdf@6.7.6-beta.2
24P32
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');
RNT 测试用例:
24P4/rn-tester/examples/react-native-pdf/testCase/Test/PdfApitest.tsx
24P4/rn-tester/examples/react-native-pdf/testCase/Test/PdfErrorApitest.tsx
24P32/rn-tester/examples/react-native-pdf/PdfTest.tsx
影响 HarmonyOS 上远程 PDF、base64 PDF、页面单击事件、PdfManager 和 react-native-blob-util 相关场景,可能导致 PDF 无法加载、加载界面永久卡住、页面点击功能不可用或 NativeModule 缺失时应用直接启动失败。
问题描述
HarmonyOS 实现中的 PDF 远程加载、页面单击事件和 NativeModule 兼容性存在以下问题:
onPageSingleTap没有触发。HTTP://、HTTPS://等大写协议头的 PDF URL 无法加载。PdfManagerNativeModule 时,调用PdfManager.loadFile会同步抛出TypeError。react-native-blob-utilNativeModule 时,模块初始化读取getConstants会导致应用启动失败。data:application/pdf;base64,...格式的 PDF。复现步骤
PdfView加载不可访问或下载失败的 HTTP(S) PDF 地址,观察加载状态和onError回调。onPageSingleTap回调。source.uri设置为HTTPS://...或HTTP://...,加载 PDF,观察网络识别和下载结果。PdfManagerNativeModule 的工程中调用PdfManager.loadFile(...),观察 JS 引擎和应用启动结果。react-native-blob-utilNativeModule 的 HarmonyOS 工程中引入 PDF 组件并启动应用,观察 JS bundle 初始化过程。onError是否携带明确下载失败信息。source.uri设置为合法的 base64 PDF 数据,观察 PDF 是否能加载。预期结果
onPageSingleTap,并传递页码和点击坐标。react-native-blob-utilNativeModule。onError返回下载失败,不应继续按 PDF 文件解析。实际结果
onPageSingleTap永远不触发。Parameter verification failed, the url should start with http(s)://。PdfManager.loadFile在 NativeModule 缺失时同步抛出TypeError,可能导致Invariant Violation: "app_name" has not been registered。react-native-blob-utilNativeModule 缺失时,初始化阶段访问getConstants导致应用启动失败。复现概率
必现(100%,网络场景需设备可访问测试地址)。
环境信息
br_rnoh0.72@react-native-ohos/react-native-pdf@6.7.6-beta.224P32DEMO
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');RNT 测试用例:
24P4/rn-tester/examples/react-native-pdf/testCase/Test/PdfApitest.tsx24P4/rn-tester/examples/react-native-pdf/testCase/Test/PdfErrorApitest.tsx24P32/rn-tester/examples/react-native-pdf/PdfTest.tsx影响范围
影响 HarmonyOS 上远程 PDF、base64 PDF、页面单击事件、
PdfManager和react-native-blob-util相关场景,可能导致 PDF 无法加载、加载界面永久卡住、页面点击功能不可用或 NativeModule 缺失时应用直接启动失败。