有没有办法测试一个给定的浏览器是否支持文件上传元素上的multiple
属性?服务器端或客户端实现就足够了。测试浏览器是否支持多个文件上传?
我意识到我可以测试用户代理与支持该功能的已知浏览器列表,但这似乎是一个相当虚弱的实现(即,如果IE 10在终于启动时支持该功能,必须去编辑我的代码)。我宁愿直接测试该功能的支持。
想法?
有没有办法测试一个给定的浏览器是否支持文件上传元素上的multiple
属性?服务器端或客户端实现就足够了。测试浏览器是否支持多个文件上传?
我意识到我可以测试用户代理与支持该功能的已知浏览器列表,但这似乎是一个相当虚弱的实现(即,如果IE 10在终于启动时支持该功能,必须去编辑我的代码)。我宁愿直接测试该功能的支持。
想法?
我建议使用"multiple" in document.createElement("input")
进行特征检测。
由于此功能是HTML5规范的一部分,并且仅在当前实现中出现,因此您可能还没有确定可靠的方法来执行此操作。想知道肯定吗?然后在尽可能多的浏览器上进行测试。然而,随着中说,该代码段发现在:
https://developer.mozilla.org/en/DOM/Input.multiple
不表明你应该能够确定这基于一个简单的试验的“多”的存在属性像常用许多其他元素。
认为目前的时间做这个没有可靠的办法,如已被证明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
代替上面引用的正则表达式。
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');
}
你有没有想过使用[uploadify(http://www.uploadify.com/)呢? – stivlo
@stivlo我有,而我正在使用这个[jQuery插件](http://aquantum-demo.appspot.com/file-upload)。我发现它好多了,你为什么推荐Uploadify? –
因为这是我所知道的,我还没有遇到过jQuery文件。看一看,谢谢。 – stivlo