我需要一种方法来检测浏览器是Safari 5或更高版本 - 但是javascript不应该依赖于useragent,因为它可以被覆盖!有什么想法吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
如果不接受最终用户和/或浏览器本身可以修改用户代理,则无法可靠地检测浏览器。
作为第1点的结果,几乎始终最好使用功能支持检测(例如使用Modernizr)。
因为 次需要专门检测浏览器,例如禁用或启用误报/不可检测的特定功能,例如Safari 5中的文件拖放
作为示例,以下代码提供了一个函数isFileDragAndDropSupported()
,该函数使用isSafari5()
函数返回Safari 5支持文件拖放,即使window.FileReader
不是在Safari 5中定义。
function isSafari5() {
return !!navigator.userAgent.match(' Safari/') && !navigator.userAgent.match(' Chrom') && !!navigator.userAgent.match(' Version/5.');
};
function isFileAPIEnabled () {
return !!window.FileReader;
};
function isFileDragAndDropSupported() {
var isiOS = !!navigator.userAgent.match('iPhone OS') || !!navigator.userAgent.match('iPad');
return (Modernizr.draganddrop && !isiOS && (isFileAPIEnabled() || isSafari5()));
};
注意:仅对isFileDragAndDropSupported()函数需要Modernizr。 isSafari5()函数将独立运行。