我刚试过这个......它的工作原理......
自己试试吧!http://fiddle.jshell.net/nmGRu/show/
(如果您发现任何浏览器未能报告我想知道的正确结果...同上任何其他的工作,这将有助于完成这个答案)
Safari(iOS 5 及更低版本)将返回false
,因为它不支持文件上传(特别是它允许您添加输入,但将其标记为禁用)......但支持它的移动浏览器,如三星 Galaxy Tab (Android)、黑莓PlayBook / BlackBerry 10(我正在 Dev Alpha 上进行测试)将返回true
,因为他们的浏览器确实支持上传。
到目前为止正确的测试结果:
- Apple iPhone iOS 5 及以下 Safari(检测到不支持)
- Apple iPhone iOS 6 Safari(检测支持 - 允许选择照片/视频)
- Apple iOS 4/iOS 5,越狱,已安装 Safari Upload Enabler(检测到支持)
- Apple iPhone w/Chrome(检测到不支持)
- Apple iPhone w/Opera Mini(检测支持 - 允许选择照片)
- Android 版 Chrome(检测支持)
- Android 版本的 Firefox(检测支持)
- Android 版 Opera(检测支持)
- 黑莓 OS7 智能手机(检测支持)
- BlackBerry PlayBook(检测支持)
- BlackBerry 10(Dev Alpha 和 Z10)(检测支持)
- HTC Desire(检测支持)
- 三星 Galaxy Nexus(检测到支持)
- 三星 Galaxy Nexus S(检测到支持)
- 三星 Galaxy Nexus 7 平板电脑(检测到支持)
- 三星 Galaxy Note(检测到支持)
- 三星 Galaxy S2(检测到支持)
- 三星 Galaxy S3(检测到支持)
- 三星 Galaxy Tab(检测到支持)
- Tizen(检测支持)
到目前为止的错误检测测试结果:
- Windows Phone {Tango}(检测到支持,但实际上不支持)
注意:我正在修改此代码以解决 windows phone 上的检测问题
这是一个干净的版本,它只返回一个布尔值......并且不会污染页面。
function hasFileUploadSupport(){
var hasSupport = true;
try{
var testFileInput = document.createElement('input');
testFileInput.type = 'file';
testFileInput.style.display = 'none';
document.getElementsByTagName('body')[0].appendChild(testFileInput);
if(testFileInput.disabled){
hasSupport = false;
}
} catch(ex){
hasSupport = false;
} finally {
if(testFileInput){
testFileInput.parentNode.removeChild(testFileInput);
}
}
return hasSupport;
}
alert(hasFileUploadSupport());