【发布时间】:2011-02-20 19:49:04
【问题描述】:
我正在尝试检测 JavaScript 中的 HTML5 拖放支持。 Modernizr 似乎无法处理这个测试用例。
【问题讨论】:
标签: javascript html drag-and-drop standards
我正在尝试检测 JavaScript 中的 HTML5 拖放支持。 Modernizr 似乎无法处理这个测试用例。
【问题讨论】:
标签: javascript html drag-and-drop standards
你可以这样做:
if('draggable' in document.createElement('span')) {
alert("Drag support detected");
}
You can see a quick demo test using the above check here.
另外,there's a nice feature detection (not browser detection, yay!) list that's fairly well maintained here,如果您也在寻找其他 HTML5 功能。
【讨论】:
在 document.createElement('span') 中检测“可拖动”似乎是个好主意,但实际上它不起作用。
iOS 声称可拖动元素在元素中,但不允许拖放。 (参考:Safari Web Content Guide: Handling Events)
IE9 声称 draggable 不在元素中,但确实允许拖放。 (参考:我在 IE 中测试 HTML5 拖放。)
Modernizr 是更好的选择,因为它不会混淆 IE。但是,它指出 HTML5 拖放可在 iOS 上使用。
以下是我检测 HTML5 拖放的方法:
var iOS = !!navigator.userAgent.match('iPhone OS') || !!navigator.userAgent.match('iPad');
if (Modernizr.draganddrop && !iOS) {
HTML5 drag and drop solution
} else if (Modernizr.draganddrop && iOS) {
iOS drag and drop solution
} else {
non-HTML5 drag and drop solution
}
【讨论】:
这就是它在 Modernizr 中的实现方式
function() {
var div = document.createElement('div');
return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
}
【讨论】:
使用 Modernizr 中的“isEventSupported”方法检查是否支持“dragstart”和“drop”。见How to detect browser support File API drag n drop。
【讨论】: