【发布时间】:2021-01-02 00:18:12
【问题描述】:
我在触发在旧 iOS 设备上打开文件对话框时遇到了问题,具体来说,问题似乎出在仍在运行 iOS 12 的设备上。
我正在使用 React-Dropzone 包为文件创建一个放置区,但还添加了一种方法来选项卡该区域以打开文件对话框以选择文件。
然后我使用 Hammerjs 来检测 onTab 事件。
我可以通过添加在调用onTab 时触发的警报来确定onTab 事件正在触发,并且是用于打开未触发文件的对话框的函数在旧版 iOS 设备上打开对话框。
const FileUploadDropzone = () => {
...
const {getRootProps, getInputProps, open, inputRef} = useDropzone({
// Disable click and keydown behavior
noClick: true,
noKeyboard: true,
});
const handleTap = useCallback(() => {
// specific function created by React-Dropzone to open the dialog
open();
// also tried to trigger the input click directly using a ref (have confirmted that the input is correctly referenced)
inputRef.current.click();
}, [allowInteract, uploading, open]);
return (
<Hammer onTap={handleTap}>
<div {...getRootProps()}>
<input {...getInputProps()}/>
{children}
</div>
</Hammer>
);
};
根据我的阅读,输入不能将样式设置为display:none,如果是这样,则您无法以编程方式触发打开文件对话框。
所以我设置了如下样式:
input {
visibility: hidden;
height: 0px;
width: 0px;
}
我还尝试做的是将输入和传递给组件的子元素包装在一个标签中,希望能够更好地支持单击标签打开对话框,但即使这样也行不通。
所以现在我很茫然,我不明白如何让它在这些旧的 iOS
【问题讨论】:
标签: javascript css ios mobile-safari react-dropzone