2012-03-02 41 views
23

Tôi hiện đang làm việc trên một dự án tại nơi làm việc bằng cách sử dụng API kéo và thả HTML5 để cung cấp chức năng bổ sung bao gồm kéo các mục vào và ra khỏi trình duyệt. Tôi hiện đang gặp các sự cố dành riêng cho Chrome (nếu không chỉ được thử nghiệm trong Firefox, hoạt động như mong đợi).GetData() kéo và thả của HTML5 chỉ hoạt động trên sự kiện thả trong Chrome?

Vấn đề là tôi không thể sử dụng phương thức event.dataTransfer.getData(type) để trả lại tập dữ liệu trên sự kiện dragstart trong bất kỳ sự kiện nào ngoại trừ sự kiện drop.

tôi đặt sự kiện như vậy, sau khi liên kết với các sự kiện dragstart (mà không lửa):

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

Sau đó, trong trường hợp drop, tôi có thể nhận được tốt dữ liệu.

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

Tuy nhiên tôi không thể sử dụng cùng phương pháp như trên trên bất kỳ sự kiện nào khác (chẳng hạn như dragover). Ngay cả khi tôi thử và sử dụng phương pháp trên trên dòng sau khi gọi số setData() (tức là, trong số gọi lại dragstart), thì nó vẫn sẽ trả về undefined.

Vì vậy, trong Chrome, vấn đề là getData trong Chrome sẽ luôn trả về undefined, ngoại trừ trong cuộc gọi lại sự kiện drop. (Trong Firefox, tôi có thể nhận được dữ liệu chính xác.)

Nếu bạn có tham chiếu đến đối tượng dataTransfer của cùng một yếu tố kéo, vậy tại sao bạn không thể lấy dữ liệu cho đến khi nó bị xóa?

Chỉ cần tự hỏi:

  • Có ai gặp khó khăn này với Chrome trước đây?
  • Có cách giải quyết nào?
  • Hoặc đó có phải là điều mà Chrome cần khắc phục không?

Resources: Specification for HTML5 drag and drop.

+0

[Báo cáo lỗi này] (http://code.google.com/p/chromium/issues/detail?id=94023) dường như có liên quan. – pimvdb

+0

bản sao có thể có của [bộ dữ liệuDataDDfer HTML5DD hoặc getData không hoạt động trong mọi trình duyệt ngoại trừ Firefox] (http://stackoverflow.com/questions/11927309/html5-dnd-datatransfer-setdata-or-getdata-not-working-in- mọi trình duyệt ngoại trừ-fi) – broofa

Trả lời

21

WebKit, và do đó Chrome, là khá hạn chế trên khi bạn có thể gọi getData. Bạn không được phép làm điều đó bên trong dragstart or dragover. Tôi nghĩ rằng this is the canonical bug.

+2

Vẫn không hoạt động trong chrome. Phiên bản 48 – Lombas

+0

@Lombas nó sẽ được làm việc, kể từ khi trạng thái của lỗi nói RESOLVED FIXED kể từ 2013-03-22 –

1

Tham khảo this answer:

Các dữ liệu chỉ có trên thả, đây là một tính năng bảo mật từ một trang web có thể lấy dữ liệu khi bạn tình cờ được kéo một cái gì đó trên trang web.

Các vấn đề liên quan