测试浏览器是否支持多个文件上传?

时间:2011-10-21 16:18:07

标签: javascript html html5

有没有办法测试给定的浏览器是否支持文件上传元素的multiple属性?服务器端或客户端实现就足够了。

我确实知道我可以针对支持该功能的已知浏览器列表测试用户代理,但这似乎是一个相当脆弱的实现(即,如果IE 10最终启动时支持该功能,我会必须编辑我的代码)。我更愿意直接测试该功能的支持。

思想?

3 个答案:

答案 0 :(得分:3)

由于此功能是HTML5规范的一部分,并且仅在当前实现中出现,因此您可能还没有明确可靠的方法来执行此操作。想知道吗?然后在尽可能多的浏览器上测试它。但是,如上所述,代码段位于:

https://developer.mozilla.org/en/DOM/Input.multiple

确实表明你应该能够根据对“多个”属性的存在的简单测试来确定这一点,就像许多其他元素中常用的一样。

答案 1 :(得分:3)

我建议使用"multiple" in document.createElement("input")进行特征检测。

答案 2 :(得分:1)

目前没有可靠的方法可以做到这一点,正如Viljami Salminen's tests of file upload support on mobile browsers所证明的那样(即支持input type=file - 更不用说多个文件上传了)。他的调查结果表明,许多浏览器/设备错误地报告支持

我的意思是"目前没有可靠的方法来实现这一目标" 是我们没有针对此特定功能的误报列表, HTMLInputElement.multiple财产。显然,该列表将包含整个regexp of false positives for input type=file,但可能还包括仅针对此特定功能的其他误报 - 因此检测此功能的能力等待浏览器的系统测试。

暂时,您可以完全根据Salminen的代码使用以下测试,添加一行(el.multiple = true;),并用xxx替换上面引用的正则表达式。< / p>

var isMultipleFileInputSupported = (function () {
    // Handle devices which falsely report support
    if (navigator.userAgent.match(/xxx/)) {
        return false;
    }
    var el = document.createElement('input');
    el.type = 'file';
    el.multiple = true;
    return !el.disabled;
})();

用法示例:

if (isMultipleFileInputSupported) {
    console.log('multiple file input is supported');
} else {
    console.log('multiple file input is NOT supported');
}