2011-10-21 80 views
2

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

我意识到我可以测试用户代理与支持该功能的已知浏览器列表,但这似乎是一个相当虚弱的实现(即,如果IE 10在终于启动时支持该功能,必须去编辑我的代码)。我宁愿直接测试该功能的支持。

想法?

+0

你有没有想过使用[uploadify(http://www.uploadify.com/)呢? – stivlo

+0

@stivlo我有,而我正在使用这个[jQuery插件](http://aquantum-demo.appspot.com/file-upload)。我发现它好多了,你为什么推荐Uploadify? –

+0

因为这是我所知道的,我还没有遇到过jQuery文件。看一看,谢谢。 – stivlo

回答

3

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

3

由于此功能是HTML5规范的一部分,并且仅在当前实现中出现,因此您可能还没有确定可靠的方法来执行此操作。想知道肯定吗?然后在尽可能多的浏览器上进行测试。然而,随着中说,该代码段发现在:

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

不表明你应该能够确定这基于一个简单的试验的“多”的存在属性像常用许多其他元素。

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代替上面引用的正则表达式。

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'); 
} 
相关问题