所以我一直在讨论这个问题已经很长时间了。情况就是这样。当它们可用时,我不想使用mouseup和mousedown等事件。然而,对于iPhone而言,这些显然必须用touchend和touchstart取代。我要做的是检测是否支持两个以前的事件,而不是支持触摸事件。这是因为Androids和其他设备确实支持mouseup和mousedown。
此时我尝试了各种可以想象的检测方法,包括(类型是传入的事件类型):
var el = document.createElement('div');
eventName = 'on' + type;
var isSupported = (eventName in el);
if (!isSupported) {
el.setAttribute(eventName, 'return;');
isSupported = typeof el[eventName] == 'function';
}
和
if(document.hasOwnProperty('on' + type)
&& typeof document['on' + type] !== 'undefined') {
return true;
}
和
return 'on' + type in document.documentElement;
问题是这些方法中的每一种似乎都在我可靠的iPhone上评估为真。我真的可以使用一些见解。
一个要求是函数必须为一个类型接受一个字符串。我不能做像“document.onEvent”这样的事情。我有一系列要测试的事件,无论如何它应该是动态的。没有浏览器嗅探。
我也看了几篇关于这些不同想法的文章,所以我做了谷歌搜索。
http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ http://www.asiantravelhotel.com/javascript/onbeforeunload-support-detection.html