Javascript 如何在事件Dragover或Dragenter中从DataTransfer.getData获取数据
我有一个密码:Javascript 如何在事件Dragover或Dragenter中从DataTransfer.getData获取数据,javascript,jquery,angularjs,jquery-ui,angular-ui,Javascript,Jquery,Angularjs,Jquery Ui,Angular Ui,我有一个密码: element.addEventListener('dragstart',function(e){ e.dataTransfer.setData('Text', 'something is here'); },false); 当我从DataTransfer.getdata获取数据时,事件删除正在运行。 但当我想在事件dragover或dragenter中获取数据时,数据为空 element.addEventListener('dragover',function(e){
element.addEventListener('dragstart',function(e){
e.dataTransfer.setData('Text', 'something is here');
},false);
当我从DataTransfer.getdata获取数据时,事件删除正在运行。
但当我想在事件dragover或dragenter中获取数据时,数据为空
element.addEventListener('dragover',function(e){
var a = e.dataTransfer.getData('Text');
console.log(a);
},false);
因此,如何在事件dragover或dragenter中获取数据通常除了
dragstart
和drop
之外,您无法访问此事件信息。Firefox似乎为您提供了访问权限,但它似乎与标准背道而驰
拖放过程中传输数据的方式是通过数据存储
对象,该对象包含执行不同操作所需的所有信息。但是,根据访问此数据存储的事件
,您可以对这些信息执行某些限制。有3种模式,定义如下:
拖动数据存储模式,它是以下模式之一:
读/写模式
用于dragstart事件。可以将新数据添加到拖动数据存储中
只读模式
对于丢弃事件。可以创建表示拖动数据的项列表
读取,包括数据。无法添加新数据
保护模式
对于所有其他事件。拖动数据存储中的格式和类型
可以枚举表示拖动数据的项列表,但
数据本身不可用,无法添加新数据
因此,在dragover上,数据存储处于保护模式,因此数据不应可用。同样,Firefox以不同的方式实现了这一点,但在任何情况下都不应该依赖它
这些模式是出于安全原因而存在的,这些数据传输不仅允许传输同一页面的元素,还允许传输来自其他应用程序、文件等的数据。遗憾的是,事实如此;它会生成绘图占位符并知道什么是数据传输。如果您不知道正在拖动的是什么,dropEffect将非常困难。如果您控制dragstart,则可以访问。如果您不知道,那么限制您可以知道的内容是有意义的,否则您可以在用户不知道的情况下访问正在页面上拖动的内容。要从页面a跨窗口拖动到同一域中的任意页面B,我们无法从拖放目标页面访问dragstart,这很粗糙。备选方案?:传递消息(但我们不知道目标页面URL…只知道域),在
dataTransfer.types
字段中包含一些严格键入的信息,或者在两个页面之间与服务器异步协调。dataTransfer.types
确实有助于识别被拖动对象上当前存在的数据类型。因此,如果您在“dragstart”中添加了一些数据,您可以检查“dragover”中的数据类型。显然,如果你绝对需要的话,你可以“破解”它并将你所有的字符串化信息存储在那里。不过,在同一个文档中拖动时拥有这些信息是有意义的