2015-08-10 7 views
7

mam kod:jak uzyskać dane z DataTransfer.getData w wydarzeniu Dragover lub Dragenter

element.addEventListener('dragstart',function(e){ 
    e.dataTransfer.setData('Text', 'something is here'); 
},false); 

kiedy Getdata z DataTransfer.getData Drop zdarzeń jest uruchomiony. , ale gdy chcę uzyskać dane w dragover przypadku lub dragenter, dane są zerowe.

element.addEventListener('dragover',function(e){ 
    var a = e.dataTransfer.getData('Text'); 
    console.log(a); 
},false); 

Tak, jak uzyskać dane w dragover zdarzeń lub dragenter

Odpowiedz

9

Normalnie nie masz dostępu do tej informacji na temat zdarzeń innych niż dragstart i drop. Wydaje się, że Firefox zapewnia dostęp, ale wydaje się, że jest niezgodny ze standardem.

Sposób przesyłania danych podczas przeciągania i upuszczania odbywa się za pomocą obiektu data store, zawierającego wszystkie informacje potrzebne do wykonania różnych operacji. Istnieją jednak pewne ograniczenia dotyczące tego, co można zrobić za pomocą tych informacji w zależności od numeru event, do którego dostęp do tej składnicy danych. Istnieją 3 tryby, które są zdefiniowane następująco:

tryb A magazyn danych drag, która jest jedną z następujących czynności:

trybie odczytu/zapisu

Na razie dragstart. Nowe dane można dodać do magazynu danych przeciągania.

Read-only mode

Na razie upuszczenia. Lista pozycji reprezentujących przeciągnięte dane może być odczytana, łącznie z danymi. Nie można dodawać nowych danych.

trybie chronionym

Dla wszystkich innych imprez. Formaty i rodzaje znajdujące się na liście danych przeciągnięcia mogą zawierać listę elementów reprezentujących przeciągnięte dane, ale same dane są niedostępne i nie można dodać nowych danych.

https://html.spec.whatwg.org/multipage/interaction.html#the-drag-data-store

Więc na dragover, magazyn danych jest w trybie chronionym, a więc dane nie powinny być dostępne. Ponownie Firefox implementuje to inaczej, ale nie powinieneś polegać na nim w żadnym wypadku.

Te tryby są tam ze względów bezpieczeństwa, przeniesienie tych danych umożliwia przesyłanie nie tylko z elementów tej samej stronie, ale od danych z innych aplikacji, plików, itp

+0

To wstyd jest to przypadek; sprawia, że ​​rysowanie symboli zastępczych i wiedza o tym, co 'dataTransfer.dropEffect' powinno być dość trudne, jeśli nie wiesz, co to jest przeciągane. – Robert

+0

Jeśli kontrolujesz dragstart, to masz dostęp. Jeśli tego nie zrobisz, to ma sens ograniczenie tego, co możesz wiedzieć, w przeciwnym razie możesz mieć dostęp do tego, co jest przeciągane na twoją stronę bez wiedzy użytkownika. –

Powiązane problemy