Je travaille actuellement sur un projet au travail en utilisant l'API de glisser-déposer HTML5 pour fournir des fonctionnalités supplémentaires, y compris la glissade d'éléments dans et hors des navigateurs. Je rencontre actuellement des problèmes spécifiques à Chrome (autrement, uniquement testés dans Firefox, ce qui fonctionne comme prévu).
Le problème est que je ne peux pas utiliser la event.dataTransfer.getData(type)
pour renvoyer l'ensemble de données sur l'événement dragstart
dans tous les événements sauf l'événement drop
.
J'ai réglé l'événement ainsi, après avoir dragstart
événement dragstart
(qui dragstart
fire):
event.dataTransfer.setData('text/plain', "some string")
Ensuite, dans l'événement drop
, je peux obtenir les données correctes.
event.dataTransfer.getData('text/plain')
Cependant, je ne peux pas utiliser la même méthode que ci-dessus sur tout autre événement (tel que dragover
). Même si j'essaie d'utiliser la méthode ci-dessus sur la ligne après l'appel de setData()
(c.-à-d. dragstart
rappel de dragstart
), elle va toujours revenir undefined
.
Ainsi, dans Chrome, le problème est que getData
dans Chrome retournera toujours undefined
, sauf dans le rappel de l'événement drop
. (Dans Firefox, je peux obtenir avec succès les données correctes.)
Si vous avez la référence à l'objet dataTransfer
du même élément de glisser, pourquoi ne devriez-vous pas pouvoir obtenir les données jusqu'à ce qu'elles soient supprimées?
Je me demandais juste:
Ressources: Spécification pour le glisser-déposer HTML5.
WebKit, et donc Chrome, est assez restrictif lorsque vous pouvez appeler getData
. Vous n'êtes pas autorisé à le faire dans dragstart
ou dragover
. Je pense que c'est le bogue canonique .
Référencer cette réponse :
Les données ne sont disponibles qu'en drop, il s'agit d'une fonctionnalité de sécurité car un site Web peut saisir des données lorsque vous traitez quelque chose sur la page Web.