Javascript 如何将数据(uri格式)从浏览器拖动到其他应用程序

Javascript 如何将数据(uri格式)从浏览器拖动到其他应用程序,javascript,html,google-chrome,drag-and-drop,electron,Javascript,Html,Google Chrome,Drag And Drop,Electron,利用 dataTransfer.setData("DownloadURL", "application/octet-stream:fileName.bin:data:application/octet-stream;base64,eNcoDEdFiLEStuFf"); 我们可以将文件(以uri格式编写)下载到桌面(或任何其他文件夹) 但如何使用uri格式将其拖到其他应用程序中。 e、 g.将uri格式的pdf内容从html页面拖动到adobe reader,以便它能够呈现内容 data:app

利用

dataTransfer.setData("DownloadURL", "application/octet-stream:fileName.bin:data:application/octet-stream;base64,eNcoDEdFiLEStuFf");
我们可以将文件(以uri格式编写)下载到桌面(或任何其他文件夹)

但如何使用uri格式将其拖到其他应用程序中。 e、 g.将uri格式的pdf内容从html页面拖动到adobe reader,以便它能够呈现内容

data:application/pdf;base64,JVBERi0xLjUKJbXtrvsKMyAwIG9iago8PCAvTGVuZ3RoIDQgMCBSCiAgIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp4nGWSQW4DIQxF95zCJ6BgwDDH6BGqkZIsJou295cKxjaMqkSZ/wX+9vPk2wUYn58nfHwFeP46qj4eB9Tm09HgDZhVX4DoKUf1GD0FhFp9Koc5glO0A8m6IKJvIW4++pzNx8B5 RD6SmcwVp3gHSUvnefQta0zgq9IjSF0hkReUOSFbB6WtANEz+7Qj7EU6G+vmS2FNB1PG5EM6nNnMdaf6voTL9GwuEbK6+5JPBy9XEl8v/PuGWPjGtJdaQnkTctv8y8nCIvHjbSykS2j7XpfnpcuG5lhu7E4m7O+S9okv9TXJZBJo/v8kD5dnTRpgiKqv8T/paxwaAyTeKStd59DFV0K52f8FM1RDSF62NlDYXLlKfG78kKjp3Oqix7O/liKsqc9OtTMYUR/QiLo2oq7HdxlcRJhuRJh3Isx3Isx3IvEyskQpkXXR47gT9dZr6o2IGYwo50XUtRF1PQKKEsl1JtIGQqTdJaTdicQbkXh91BuRddHjshP1mdbUGxEzPNyn+wPIlfKYCmVuZHN0cmVhbQplbmRvYmoKNCAwIG9iagogICAzOTEKZW5kb2JqCjIgMCBvYmoKPDwKICAgL0V4dEdTdGF0ZSA8PAogICAgICAvYTAgPDwgL0NBIDEgL2NhIDEgPj4KICAgPj4KPj4KZW5kb2JqCjUgMCBvYmoKPDwgL1R5cGUgL1BhZ2UKICAgL1BhcmVudCAxIDAgUgogICAvTWVkaWFCb3ggWyAwIDAgODAgODAgXQogICAvQ29udGVudHMgMyAwIFIKICAgL0dyb3VwIDw8CiAgICAgIC9UeXBlIC9Hcm91cAogICAgICAvUyAvVHJhbnNwYXJlbmN5CiAgICAgIC9JIHRydWUKICAgICAgL0NTIC9EZXZpY2VSR0IKICAgPj4KICAgL1Jlc291cmNlcyAyIDAgUgo+PgplbmRvYmoKMSAwIG9iago8PCAvVHlwZSAvUGFnZXMKICAgL0tpZHMgWyA1IDAgUiBdCiAgIC9Db3VudCAxCj4+CmVuZG9iago2IDAgb2JqCjw8IC9DcmVhdG9yIChjYWlybyAxLjE0LjEgKGh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZykpCiAgIC9Qcm9kdWNlciAoY2Fpcm8gMS4xNC4xIChodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcpKQo+PgplbmRvYmoKNyAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZwogICAvUGFnZXMgMSAwIFIKPj4KZW5kb2JqCnhyZWYKMCA4CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDc4OSAwMDAwMCBuIAowMDAwMDAwNTA1IDAwMDAwIG4gCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMDQ4MyAwMDAwMCBuIAowMDAwMDAwNTc3IDAwMDAwIG4gCjAwMDAwMDA4NTQgMDAwMDAgbiAKMDAwMDAwMDk4MSAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDgKICAgL1Jvb3QgNyAwIFIKICAgL0luZm8gNiAwIFIKPj4Kc3RhcnR4cmVmCjEwMzMKJSVFT0YK
如果可能,如何实施

dataTransfer.setData("application/pdf","content here ");
要做到这一点:

您必须确保客户端具有要使用的应用程序。许多用户使用不同的应用程序打开pdf文件

要使用的应用程序必须将自身注册到操作系统以接收传入请求。(例如,在MacOS上,应用商店应用程序自行注册,您可以通过单击html链接打开应用程序页面)

如果Adobe Reader是您想要使用的应用程序,您可以搜索它是否有这样的未来


如果您想对搜索机器人隐藏pdf文件,可以在服务器临时文件夹中创建它们,并创建指向它们的随机链接。客户端使用后,您只需删除即可。

查看Electron API文档(此处复制用于存档):

在网页中:

<a href="#" id="drag">item</a>
<script type="text/javascript" charset="utf-8">
  document.getElementById('drag').ondragstart = (event) => {
    event.preventDefault()
    ipcRenderer.send('ondragstart', '/path/to/item')
  }
</script>

我不太确定这是否回答了实际问题(启用应用程序之间的拖放)。已经尝试过了,但它需要实际文件的路径而不是数据(uri格式)如何将文件写入临时文件夹而不是保存到变量?写入临时文件并使用它可以工作,但如果可能,请寻找其他解决方案。到目前为止,这似乎是不可能的。您不想创建临时文件的任何紧迫原因?使用拖放,我们可以为同一数据设置多种格式。EG如果我在AdobeIllustrator中拖动一个图像文件,它将放置该文件(pdf格式),而在sublime文本编辑器(svg代码)中放置相同的图像时,它将放置该代码。
const {ipcMain} = require('electron')
ipcMain.on('ondragstart', (event, filePath) => {
  event.sender.startDrag({
    file: filePath,
    icon: '/path/to/icon.png'
  })
})