Javascript 检测浏览器是否本机支持将音频传递给输入标记
我有一个网页,应该只接受音频文件,更准确地说,只有mp3文件。因此,我有一个输入:Javascript 检测浏览器是否本机支持将音频传递给输入标记,javascript,html,frontend,web-frontend,Javascript,Html,Frontend,Web Frontend,我有一个网页,应该只接受音频文件,更准确地说,只有mp3文件。因此,我有一个输入: 问题是,iOS 10.3上的Safari忽略了accept属性。即使没有,在iOS 10上接受音频也是没有意义的,因为这个iOS版本不支持文件。但更令人困惑的是,Safari显示了带有以下选项的模式: 拍照或录像 照片库 由于我的网站只接受音频,这些选项没有多大意义。所以我更愿意在这个Safari版本上显示一条错误消息 问题是:是否有一种方法(仅通过HTML或JS)来检测浏览器是否本机支持将音频作为文件传
问题是,iOS 10.3上的Safari忽略了accept
属性。即使没有,在iOS 10上接受音频也是没有意义的,因为这个iOS版本不支持文件。但更令人困惑的是,Safari显示了带有以下选项的模式:
- 拍照或录像
- 照片库
问题是:是否有一种方法(仅通过HTML或JS)来检测浏览器是否本机支持将音频作为文件传递给
标记?因此,经过数小时的研究和浏览互联网,我得出以下结论:
- 几乎没有一款手机浏览器支持
属性。因此,您无法阻止移动浏览器选择不同于所需的文件类型accept
- 答案相同的地方也有类似的问题:编写自己的输入处理程序,检查文件扩展名,如果不是您想要的,则显示错误
.mp3
后缀(这可能是一个奇怪的情况,但像Android这样的操作系统允许你这么做)。因此,我选择通过Web Audio API测试该文件:
//在输入处理程序中
const fr=new FileReader();
fr.readAsArrayBuffer(文件);
fr.addEventListener('loadend',()=>{
audioCtx.current=新的AudioContext();
audioCtx.current.decodeAudioData(
fr.result,
成功回调,
(错误)=>{
警报(“文件格式不正确。请传递音频文件”);
},
);
我的页面进行了一些可视化处理,因此它可以对音频进行解码。但是,使用这种方法,我只能测试该文件是否是正确的音频,而不能测试它是否完全是mp3文件。您可以获取用户的浏览器和操作系统。创建
[]
浏览器的|
操作系统,您不想支持,请进行相应的比较和处理。您应该在accept中使用“audio/mpeg”而不是“.mp3”来接受mp3文件