Похоже, что необходимо установить некоторые данные для перетаскиваемого элемента в событии dragstart
, чтобы событие dragover
было запущено в зоне сброса.
Я обновил фрагмент http://jsfiddle.net/G9mJw/20/, который теперь работает и в Chrome.
и новый код следующим образом:
var dropzone = document.getElementById('dropzone'),
draggable = document.getElementById('draggable');
function onDragStart(event) {
event.dataTransfer.setData('text/html', null); //cannot be empty string
}
function onDragOver(event) {
var counter = document.getElementById('counter');
counter.innerText = parseInt(counter.innerText, 10) + 1;
}
draggable.addEventListener('dragstart', onDragStart, false);
dropzone.addEventListener('dragover', onDragOver, false);
Также есть дополнительная информация о том, как это работает:
https://developer.mozilla.org/En/DragDrop/Drag_Operations#Drag_Data и это упоминание вещи как:
Когда происходит перетаскивание, данные должны быть связаны с перетаскиванием, которое определяет, что перетаскивается.
Что облегчает понимание ...
Я просто пытаюсь выяснить, как это работает в Safari без необходимости отправлять некоторые данные? или, возможно, он уже отправляет контент по умолчанию?
Также метод event.dataTransfer.setData('text/html', null);
, как ни странно, не может отправлять пустую строку, такую как event.dataTransfer.setData('text/html', '');
, иначе событие dragover
не будет отправлено.