感谢Perfection kills,我们可以使用以下 JavaScript 来检测事件支持:
function hasEvent(ev) {
var elem = document.createElement('a'),
type = 'on' + ev,
supported = elem[type] !== undefined;
if (!supported) {
elem.setAttribute(type, 'return;');
supported = typeof elem[type] === 'function';
}
elem = null;
return supported;
}
这仅在我需要它的时候起作用:检测mouseenter
支持;hasEvent('mouseenter')
将在 Chrome、Firefox 等中返回 false,因为它应该。
但现在我正在尝试“修复”不支持focusin
andfocusout
事件的浏览器。根据 PPK,这基本上只是 Firefox。不幸的是,Chrome 和 Safari 被列为“不完全”支持,原因如下:
Safari 和 Chrome 仅使用 addEventListener 触发这些事件;不是传统的注册方式。
一般来说,这很好。addEventListener
反正我只会用。但是,这确实意味着通过检测支持elem.onfocusin !== undefined
不起作用。我测试了它,这是真的:
<p>Do I support <a href="#">focusin</a>?</p>
<script>
var elem = document.getElementsByTagName('p')[0];
// hasEvent method defined here
function listener() {
var response = hasEvent('focusin') ? 'Yes!' : 'No...';
alert(response);
}
elem.addEventListener('focusin', listener, false);
</script>
No...
Chrome 中的上述警报!有什么方法可以检测浏览器是否支持focusin
,而不使用浏览器嗅探?