web-dev-qa-db-ja.com

HTML5ドラッグアンドドロップgetData()はChromeのドロップイベントでのみ機能しますか?

私は現在、HTML5ドラッグアンドドロップAPIを使用して、ブラウザの内外へのアイテムのドラッグなどの追加機能を提供するプロジェクトに取り組んでいます。私は現在、Chromeに固有の問題に遭遇しています(それ以外の場合はFirefoxでのみテストされており、期待どおりに機能します)。

問題は、event.dataTransfer.getData(type)メソッドを使用して、dragstartイベント以外のイベントでdropイベントのデータセットを返すことができないことです。

dragstartイベント(起動します)にバインドした後、このようにイベントを設定します。

_event.dataTransfer.setData('text/plain', "some string")
_

次に、dropイベントで、データを正常に取得できます。

_event.dataTransfer.getData('text/plain')
_

ただし、他のイベント(dragoverなど)で上記と同じ方法を使用することはできません。 setData()を呼び出した後(つまり、dragstartコールバックで)、上記のメソッドを行で使用しようとしても、undefinedが返されます。

したがって、Chromeでは、問題は、getData in Chromeは、undefinedイベントコールバック内を除いて、常にdropを返すことです。(In Firefox、正しいデータを正常に取得できます。)

同じドラッグ要素のdataTransferオブジェクトへの参照がある場合、データがドロップされるまでデータを取得できないのはなぜですか?

ただ疑問に思う:

  • 誰かが以前にChromeでこの問題を抱えたことはありますか?
  • どのような回避策がありますか?
  • または、それはChrome修正する必要があるものですか?

リソース: HTML5ドラッグアンドドロップの仕様。

25
Chris Pearce

WebKit、つまりChromeは、getDataを呼び出すことができるタイミングをかなり制限しています。 dragstartまたはdragover 内でそれを行うことは許可されていません。私は これは標準的なバグです だと思います。

22
robertc

参照 この回答

データはドロップでのみ利用できます。これはセキュリティ機能です。Webページ上で何かをドラッグしているときにWebサイトがデータを取得する可能性があるためです。

4
Z. Khullah