如何检测浏览器支持File API拖放

Xav*_*ver 4 javascript drag-and-drop fileapi

我喜欢在div上添加背景,仅适用于支持拖放文件的浏览器

我不喜欢使用modernizr,只是一行脚本

ant*_*rna 9

为什么不从Modernizr复制所需的部件?

var isEventSupported = (function() {

      var TAGNAMES = {
        'select': 'input', 'change': 'input',
        'submit': 'form', 'reset': 'form',
        'error': 'img', 'load': 'img', 'abort': 'img'
      };

      function isEventSupported( eventName, element ) {

        element = element || document.createElement(TAGNAMES[eventName] || 'div');
        eventName = 'on' + eventName;

        // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those
        var isSupported = eventName in element;

        if ( !isSupported ) {
          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
          if ( !element.setAttribute ) {
            element = document.createElement('div');
          }
          if ( element.setAttribute && element.removeAttribute ) {
            element.setAttribute(eventName, '');
            isSupported = typeof element[eventName] == 'function';

            // If property was created, "remove it" (by setting value to `undefined`)
            if ( typeof element[eventName] != 'undefined' ) {
              element[eventName] = undefined;
            }
            element.removeAttribute(eventName);
          }
        }

        element = null;
        return isSupported;
      }
      return isEventSupported;
    })();
Run Code Online (Sandbox Code Playgroud)

用法:

if (isEventSupported('dragstart') && isEventSupported('drop')) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

对于File API:

var isFileAPIEnabled = function() {
  return !!window.FileReader;
};
Run Code Online (Sandbox Code Playgroud)

  • 支持 'drop' 事件并不意味着它支持 FILE 删除。IE 8 支持 'drop' 事件。 (2认同)