我需要进行特性检测,以确定浏览器是否支持SVG过滤器(具体来说是feGaussianBlur)。我该如何测试这个功能?Safari不支持该过滤器,但会默默地忽略它。
你可以查看接口中可用的枚举类型,例如:
var supportsfilter = typeof SVGFEColorMatrixElement !== undefined &&
SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE==2;
setStdDeviation
的方法,我们将检查该方法是否存在。如果不存在,我们得出结论当前浏览器不支持该过滤器。
当在 Safari 中检查此 fiddle 时,文本会变成红色;而在 Firefox 中则会变成绿色。
if(filterTag.constructor.toString().indexOf('SVGFilterElement') != -1)
测试未能正确检测 Opera(它支持 SVG 滤镜)。 - Erik Dahlströmvar blur = document.createElementNS("http://www.w3.org/2000/svg", "feGaussianBlur"); blur.setAttribute("stdDeviation", "2"); return (typeof blur.setStdDeviation !== 'undefined' );
- wheresrhys我为遗留的安卓漏洞添加了一个小修改
var supportsfilter = window['SVGFEColorMatrixElement'] !== undefined && SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE == 2
SVGFEColorMatrixElement
之后,属性才会出现在DOM中(未初始化?)。我已经在Safari中进行了测试,并抛出了引用错误,正如您所期望的那样,因此测试需要一个try/catch块。+1 - wheresrhys