接受从另一个浏览器窗口拖放图像

Ben*_*lts 31 javascript html5

在Javascript中,我知道如何设置一个拖放目标,接受来自用户计算机的文件上传.如何设置接受从其他网站拖动的图像的放置目标?我需要知道的是他们拖动的图像的URL.

我知道这是可能的,因为Google Docs接受来自其他网站的图像丢弃.知道他们是怎么做的吗?

Dar*_*rov 39

您可以定义放置区域:

<div id="dropbox">DropZone => you could drop any image from any page here</div>
Run Code Online (Sandbox Code Playgroud)

然后处理dragenter,dragexit,dragoverdrop事件:

var dropbox = document.getElementById('dropbox');

dropbox.addEventListener('dragenter', noopHandler, false);
dropbox.addEventListener('dragexit', noopHandler, false);
dropbox.addEventListener('dragover', noopHandler, false);
dropbox.addEventListener('drop', drop, false);

function noopHandler(evt) {
    evt.stopPropagation();
    evt.preventDefault();
}
function drop(evt) {
    evt.stopPropagation();
    evt.preventDefault(); 
    var imageUrl = evt.dataTransfer.getData('Text');
    alert(imageUrl);
}
Run Code Online (Sandbox Code Playgroud)

它在drop事件处理程序内部,我们正在从dataTransfer对象中读取图像数据作为Text.如果我们从其他网页中删除图像,则该文本将代表图像的网址.

这是一个live demo.


更新:

看起来Chrome在Windows和MacOS之间存在差异.在Windows上dataTransfer.getData('Text');工作但不在MacOS上.dataTransfer.getData('URL');应该兼顾两者.

  • 看起来MacOS上的Chrome使用`dataTransfer.getData('url');`. (3认同)
  • 当拖动的图像是一个链接时,`getData('URL')`不起作用,但我找不到另一种方法来获取有关拖动对象的信息......似乎对象不是图像,而是链接包含该图像 (3认同)