52 行
2.0 KiB
Markdown
52 行
2.0 KiB
Markdown
# @xuqm/rn-xwebview
|
|
|
|
## 摄像头与麦克风权限
|
|
|
|
Android 宿主按实际业务在 `AndroidManifest.xml` 声明权限:
|
|
|
|
```xml
|
|
<uses-permission android:name="android.permission.CAMERA" />
|
|
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
|
```
|
|
|
|
H5 请求摄像头或麦克风时,XWebView 默认统一申请 Android 运行时权限,只向 WebView 放行系统已授权的资源。宿主无需在每个页面重复实现。需要额外来源校验或自定义提示时可提供 `onPermissionRequest`,此时授权决策完全由宿主回调负责。
|
|
|
|
统一 WebView、JSBridge 与文件下载模块。它复用 `@xuqm/rn-common` 的配置、会话、文件和 MIME 能力,不提供第二套网络或用户状态。
|
|
|
|
## 安装
|
|
|
|
```bash
|
|
pnpm add @xuqm/rn-common @xuqm/rn-xwebview \
|
|
react-native-webview react-native-blob-util react-native-svg
|
|
```
|
|
|
|
## 使用
|
|
|
|
```tsx
|
|
import { XWebViewView, openXWebView } from '@xuqm/rn-xwebview'
|
|
|
|
openXWebView(() => navigation.navigate('XWebView'), {
|
|
title: '页面',
|
|
url: 'https://example.com',
|
|
onNavigationStateChange(state) {
|
|
console.log(state.canGoBack, state.canGoForward, state.url)
|
|
},
|
|
})
|
|
|
|
;<XWebViewView
|
|
config={{
|
|
url: 'https://example.com',
|
|
title: '页面',
|
|
onNavigationStateChange(state) {
|
|
console.log(state.title, state.url)
|
|
},
|
|
}}
|
|
/>
|
|
```
|
|
|
|
全屏和内嵌容器都从同一 `XWebViewConfig.onNavigationStateChange` 返回实时导航状态。命令式场景可调用 `XWebViewControl.getNavigationState()`;业务层不得自行轮询标题或维护第二份 URL/前进后退状态。
|
|
|
|
下载统一使用 `handleDownloadRequest`、`startDownload` 或 `saveBase64File`。目录解析、RFC 文件名、冲突策略、MIME 推断、大文件落盘、进度、取消、Android 下载登记和打开文件均复用 common,不在 xwebview 或业务层重复实现。
|
|
|
|
H5 需要原生能力时,通过 `setXWebViewScanQRCodeHandler` 等全局 handler 接入。用户、token、平台地址不得作为页面 props 逐级传递;Bridge 在调用时读取 common 当前会话。
|