0

我正在开发一项利用 HTML5 拖放功能的功能。这个功能只需要在 Firefox 中工作,所以我不担心跨浏览器的能力。这是我遇到的问题:我需要能够仅将我的数据拖到页面上的文本和密码字段中。如果我使用常规的 text/plain 数据类型,它可以正常工作,但它也允许将数据拖到搜索框中,这是不可接受的,因为我拖动的某些数据是敏感的(密码)。另一种方法是使用自定义数据类型,但是当我这样做时,我的文本和密码字段将停止接受丢弃。简而言之,我的代码现在看起来像这样:

document.getElementById('#init').addEventListener('dragstart', function(e){
    e.dataTransfer.setData('text/link-uri', 'www.test.com');
    e.dataTransfer.setData('text/sensitive', e.target.dataset.value);
    e.dataTransfer.effectAllowed = 'copy';
});  
window.addEventListener('dragenter', function(e){
    if (e.target.type !== 'text' || e.target.type !== 'password') {
       e.preventDefault();
    }
});
window.addEventListener('dragover', function(e){
    if (e.target.type !== 'text' || e.target.type !== 'password') {
       e.preventDefault();
    }
});
window.addEventListener('drop', function(e){
    var data = e.dataTarnsfer.getData('text/sensitive');
    e.target.value = data;
});

这里有解决方法吗?我不知何故需要禁止拖入搜索框的能力。因此,我需要从具有文本/纯文本数据类型的允许目标列表中排除搜索框,或者使文本/密码字段理解新的数据类型。任何指针将不胜感激。谢谢!卢卡

4

1 回答 1

0

好的,经过一番摸索,我能够克服这个问题。对于任何感兴趣的人,我基本上将 text/plain 设置为一些虚假数据,并且只在 drop 处理程序中使用了我的自定义数据类型。这样,对于我的表单,它总是使用实际值,但是当我将值拖到搜索框时,它会拾取虚假数据。

于 2012-08-22T21:11:17.083 回答