diff --git a/apps/frontend/src/components/files/ImageUpload.tsx b/apps/frontend/src/components/files/ImageUpload.tsx index 9a117f83..18611d43 100644 --- a/apps/frontend/src/components/files/ImageUpload.tsx +++ b/apps/frontend/src/components/files/ImageUpload.tsx @@ -71,7 +71,6 @@ export default function ImageUpload({ const { message } = App.useApp() const isMobile = useIsMobile() const [isDragging, setIsDragging] = useState(false) - const cameraInputRef = useRef(null) const dragCounterRef = useRef(0) const targetIdRef = useRef(0) const valueRef = useRef(value) @@ -258,21 +257,25 @@ export default function ImageUpload({ {cameraEnabled && value.length < maxCount ? (
- void handleCameraSelect(event)} - /> - + {/* + 相机入口用「透明原生 input 铺满按钮」的方式: + 用户手指直接点在 input 上,浏览器才会把它当作拍照手势; + 旧实现把 input 移到 left:-9999px 再由按钮脚本 .click(),部分安卓 WebView + 会把相机 intent 降级成文件选择(表现为点了「拍照」却弹出文件浏览)。 + */} + + void handleCameraSelect(event)} + /> + +
) : null} {showPasteHint ? ( diff --git a/apps/frontend/src/components/files/VideoUpload.tsx b/apps/frontend/src/components/files/VideoUpload.tsx index 6a6408e1..7bf54d7c 100644 --- a/apps/frontend/src/components/files/VideoUpload.tsx +++ b/apps/frontend/src/components/files/VideoUpload.tsx @@ -50,7 +50,6 @@ export default function VideoUpload({ const { message } = App.useApp() const isMobile = useIsMobile() const inputRef = useRef(null) - const cameraInputRef = useRef(null) const [phase, setPhase] = useState<'idle' | 'compressing' | 'uploading'>('idle') const [progress, setProgress] = useState(0) @@ -144,16 +143,6 @@ export default function VideoUpload({ style={{ display: 'none' }} onChange={handleSelect} /> - {cameraEnabled ? ( - - ) : null} {value ? (
@@ -170,14 +159,22 @@ export default function VideoUpload({ {cameraEnabled ? ( - + // 透明原生 input 铺满按钮:真实手势点 input 才会被当作「拍摄」, + // 脚本 click 在部分安卓 WebView 会退化成文件选择。 + + + + ) : null} + // 同「重拍」:透明原生 input 铺满按钮,靠真实手势调起系统相机。 + + + + ) : null}