2012-03-02 5 views
23

현재 HTML5 드래그 앤 드롭 API를 사용하여 브라우저에서 항목을 드래그하는 등의 추가 기능을 제공하는 프로젝트에서 작업 중입니다. 현재 Chrome과 관련된 문제를 다룰 예정입니다 (그렇지 않으면 예상대로 작동하는 Firefox에서만 테스트 됨).HTML5 드래그 앤 드롭 getData()는 Chrome의 드롭 이벤트에서만 작동합니다.

event.dataTransfer.getData(type) 메서드를 사용하여 이벤트를 제외한 모든 이벤트에서 dragstart 이벤트에 설정된 데이터를 반환 할 수 없다는 것이 문제입니다.

나는 (화재 않는)에 dragstart 이벤트에 바인딩 한 후,과 같이 이벤트를 설정합니다
event.dataTransfer.setData('text/plain', "some string") 

는 그 다음 drop 경우에, 나는 데이터 벌금을 얻을 수 있습니다.

event.dataTransfer.getData('text/plain') 

그러나 나는 (예 : dragover 같은) 다른 이벤트에 위와 같은 방법을 사용할 수 없습니다. setData() (즉, dragstart 콜백)을 호출 한 후 위의 메소드를 사용하여 시도해도 여전히 undefined을 반환합니다.

Chrome의 경우 drop 이벤트 콜백을 제외하고 Chrome의 은 항상 Chrome에서 getData을 반환합니다. (파이어 폭스에서는 올바른 데이터를 성공적으로 얻을 수 있습니다.) dataTransfer 같은 드래그 요소를 가진 객체에 대한 참조를 가지고 있다면 데이터가 떨어질 때까지 데이터를 가져올 수없는 이유는 무엇입니까?

그냥 궁금 :

  • 사람이 전에 크롬이 문제가 있었나요?
  • 어떤 해결 방법이 있습니까?
  • 또는 Chrome에서 해결해야 할 부분입니까?

자료 : Specification for HTML5 drag and drop.

+0

[이 버그 신고] (http://code.google.com/p/chromium/issues/detail?id=94023)와 관련된 것 같습니다. – pimvdb

+0

가능한 [HTML5 DnD dataTransfer setData 또는 getData가 Firefox를 제외한 모든 브라우저에서 작동하지 않음] (http://stackoverflow.com/questions/11927309/html5-dnd-datatransfer-setdata-or-getdata-not-working-in- 모든 브라우저 제외) – broofa

답변

21

웹킷, 따라서 크롬, 당신은 getData를 호출 할 경우에 매우 제한적입니다. 너는 dragstart or dragover 안에 그것을 할 수 없습니다. 나는 this is the canonical bug라고 생각합니다.

+2

크롬에서는 여전히 작동하지 않습니다. 버전 48 – Lombas

+0

@Lombas 버그 상태가 2013-03-22 현재 해결됨으로 표시되므로 정상적으로 작동해야합니다. –

1

this answer을 참조하기 :

데이터는 드롭에서만 사용할 수 있습니다, 이것은 당신이 웹 페이지를 통해 뭔가를 드래그 할 일 때 웹 사이트 데이터를 잡을 수 있기 때문에 보안 기능입니다.