Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测浏览器是否本机支持将音频传递给输入标记_Javascript_Html_Frontend_Web Frontend - Fatal编程技术网

Javascript 检测浏览器是否本机支持将音频传递给输入标记

Javascript 检测浏览器是否本机支持将音频传递给输入标记,javascript,html,frontend,web-frontend,Javascript,Html,Frontend,Web Frontend,我有一个网页,应该只接受音频文件,更准确地说,只有mp3文件。因此,我有一个输入: 问题是,iOS 10.3上的Safari忽略了accept属性。即使没有,在iOS 10上接受音频也是没有意义的,因为这个iOS版本不支持文件。但更令人困惑的是,Safari显示了带有以下选项的模式: 拍照或录像 照片库 由于我的网站只接受音频,这些选项没有多大意义。所以我更愿意在这个Safari版本上显示一条错误消息 问题是:是否有一种方法(仅通过HTML或JS)来检测浏览器是否本机支持将音频作为文件传

我有一个网页,应该只接受音频文件,更准确地说,只有mp3文件。因此,我有一个输入:


问题是,iOS 10.3上的Safari忽略了
accept
属性。即使没有,在iOS 10上接受音频也是没有意义的,因为这个iOS版本不支持文件。但更令人困惑的是,Safari显示了带有以下选项的模式:

  • 拍照或录像
  • 照片库
由于我的网站只接受音频,这些选项没有多大意义。所以我更愿意在这个Safari版本上显示一条错误消息


问题是:是否有一种方法(仅通过HTML或JS)来检测浏览器是否本机支持将音频作为文件传递给
标记?

因此,经过数小时的研究和浏览互联网,我得出以下结论:

  • 几乎没有一款手机浏览器支持
    accept
    属性。因此,您无法阻止移动浏览器选择不同于所需的文件类型
  • 答案相同的地方也有类似的问题:编写自己的输入处理程序,检查文件扩展名,如果不是您想要的,则显示错误
我想,这种方法是有道理的。然而,并非所有mp3文件的文件名中都有
.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文件