Ответ 1
WebKit, и, следовательно, Chrome, довольно ограничивает, когда вы можете вызвать getData
. Вам не разрешено делать это внутри dragstart
или dragover
. Я думаю, это каноническая ошибка.
В настоящее время я работаю над проектом, работающим с использованием API перетаскивания HTML5, чтобы обеспечить дополнительную функциональность, включая перетаскивание элементов в браузерах и из них. В настоящее время я сталкиваюсь с проблемами, характерными для Chrome (в противном случае они проверяются только в Firefox, который работает так, как ожидалось).
Проблема заключается в том, что я не могу использовать метод event.dataTransfer.getData(type)
для возврата набора данных в событие dragstart
в любые события, кроме события drop
.
Я устанавливаю событие таким образом, после привязки к событию dragstart
(которое срабатывает):
event.dataTransfer.setData('text/plain', "some string")
Затем в событии drop
я могу получить данные в порядке.
event.dataTransfer.getData('text/plain')
Однако я не могу использовать тот же метод, что и выше, для любых других событий (например, dragover
). Даже если я попытаюсь использовать вышеупомянутый метод в строке после вызова setData()
(т.е. В обратном вызове dragstart
), он все равно вернет undefined
.
Итак, в Chrome проблема в том, что getData
в Chrome всегда будет возвращать undefined
, кроме как в обратном вызове события drop
. (В Firefox я могу успешно получить правильные данные.)
Если у вас есть ссылка на объект dataTransfer
одного и того же элемента перетаскивания, почему вы не сможете получить данные до тех пор, пока они не будут удалены?
Просто интересно:
Ресурсы: Спецификация для перетаскивания HTML5.
WebKit, и, следовательно, Chrome, довольно ограничивает, когда вы можете вызвать getData
. Вам не разрешено делать это внутри dragstart
или dragover
. Я думаю, это каноническая ошибка.
Ссылка этого ответа:
Данные доступны только при удалении, это функция безопасности, поскольку веб-сайт может захватывать данные, когда вы перетаскиваете что-то на веб-странице.