HTML5 DnD dataTransfer setData lub getData nie działa w każdej przeglądarce oprócz Firefoksa

Rozważ toJSFiddle. Działa dobrze w Firefoksie (14.0.1), ale nie działa w Chrome (21.0.1180.75), Safari (?) I Opera (12.01?) Zarówno w Windows (7), jak i OS X (10.8). O ile mogę powiedzieć, problem dotyczy albosetData() lubgetData() metody nadataTransfer obiekt. Oto odpowiedni kod z JSFiddle.

var dragStartHandler = function (e) {
    e.originalEvent.dataTransfer.effectAllowed = "move";
    e.originalEvent.dataTransfer.setData("text/plain", this.id);
};

var dragEnterHandler = function (e) {
    //  dataTransferValue is a global variable declared higher up.
    //  No, I don't want to hear about why global variables are evil,
    //  that's not my issue.
    dataTransferValue = e.originalEvent.dataTransfer.getData("text/plain");

    console.log(dataTransferValue);
};

O ile mogę powiedzieć, to powinno działać idealnie i jeśli spojrzysz na konsolę podczas przeciągania elementu, zobaczysz wypisany identyfikator, co oznacza, że ​​znajduje element w porządku i pobiera jego atrybut id. Pytanie brzmi: czy po prostu nie ustawia się danych lub nie uzyskuje danych?

Byłbym wdzięczny za sugestie, ponieważ po tygodniu pracy nad trzema próbami i około 200 wersjami zaczynam tracić rozum. Wiem tylko, że w przeszłości działało w wersji 60 i ten konkretny kod w ogóle się nie zmienił ...

Właściwie jedną z głównych różnic między 6X a 124 jest to, że zmieniłem powiązanie zdarzenia zlive() doon(). Nie sądzę, żeby to było problemem, ale zobaczyłem kilka błędów z Chrome, jeśli chodzi o DnD podczas pracy nad tym. Zostało to obalone. Metoda wiązania zdarzeń nie ma wpływu na problem.

AKTUALIZACJA

Stworzyłem nowyJSFiddle to usuwa absolutnie wszystko i po prostu pozostawia powiązanie zdarzeń i programy obsługi. Przetestowałem go z jQuery 1.7.2 i 1.8 z obydwomaon() ilive(). Problem nadal występował, więc obniżyłem poziom i usunąłem wszystkie struktury i użyłem czystego JavaScript. Problemnadal przetrwał, więc w oparciu o moje testy to nie mój kod zawodzi. Zamiast tego wygląda na to, że Chrome, Safari i Opera również się implementująsetData() lubgetData() poza specyfikacją lub po prostu nie działa z jakiegoś powodu. Proszę popraw mnie jeżeli się mylę.

W każdym razie, jeśli spojrzysz na nowy JSFiddle, powinieneś być w stanie replikować problem, po prostu spójrz na konsolę, gdy przeciągasz element wyznaczony do zaakceptowania upuszczenia. Poszedłem i otworzyłem bilet zChrom. W końcu mogę nadal robić coś złego, ale po prostu nie wiem, jak inaczej zrobić DnD w tym momencie. Nowy JSFiddle jest tak samo pozbawiony możliwości, jak tylko może ...

questionAnswers(8)

yourAnswerToTheQuestion