javascript - example - ¿Arrastrar y soltar HTML5 getData() solo funciona en el evento drop en Chrome?
draggable jquery ejemplos (2)
Haciendo referencia a esta respuesta :
Los datos solo están disponibles en forma inmediata, esta es una característica de seguridad, ya que un sitio web puede capturar datos cuando se arrastra algo a través de la página web.
Actualmente estoy trabajando en un proyecto en el trabajo utilizando la API de arrastrar y soltar de HTML5 para proporcionar una funcionalidad adicional que incluye arrastrar elementos dentro y fuera de los navegadores. Actualmente me encuentro con problemas que son específicos de Chrome (de lo contrario, solo se probaron en Firefox, que funciona como se esperaba).
El problema es que no puedo usar el event.dataTransfer.getData(type)
para devolver el conjunto de datos en el evento dragstart
en cualquier evento excepto el evento drop
.
Establecí el evento como tal, después de vincularlo al evento dragstart
(que se dispara):
event.dataTransfer.setData(''text/plain'', "some string")
Luego, en el evento drop
, puedo obtener la multa de datos.
event.dataTransfer.getData(''text/plain'')
Sin embargo, no puedo usar el mismo método anterior en ningún otro evento (como dragover
). Incluso si trato de usar el método anterior en la línea después de llamar a setData()
(es decir, en la dragstart
llamada de dragstart
), entonces volverá undefined
.
Entonces, en Chrome, el problema es que getData
en Chrome siempre retornará undefined
, excepto dentro de la devolución de llamada del evento drop
. (En Firefox, puedo obtener correctamente los datos correctos.)
Si tiene la referencia al objeto dataTransfer
del mismo elemento de arrastre, ¿por qué no podría obtener los datos hasta que se eliminen?
Sólo me preguntaba:
- ¿Alguien ha tenido este problema con Chrome antes?
- ¿Qué soluciones hay?
- O, ¿es algo que Chrome necesita arreglar?
WebKit, y por lo tanto Chrome, es bastante restrictivo cuando puedes llamar a getData
. No está permitido hacerlo dentro de dragstart
o dragover
. Creo que este es el error canónico .