gpt4 book ai didi

Javascript CF_HDROP 实现

转载 作者:行者123 更新时间:2023-11-30 00:17:55 25 4
gpt4 key购买 nike

是否有可能实现 CF_HDROP从浏览器拖放到另一个程序?我希望使用 JavaScript 网站作为一种方式来为另一个程序在本地服务器上组织、搜索和服务器内容目录。

虽然我找到了一种从浏览器拖放到桌面或其他文件夹的下载方式。我还没有找到一种方法让它充当 CF_HDROP 剪贴板格式。我的直觉是,在浏览器中对 JavaScript 进行沙盒处理是不可能的,但我相信比我聪明的人可以证实这一点。

最佳答案

最近几天我也在寻找同样的问题,DnD functionality in HTML5有一些使用 setData() 函数操作剪贴板数据的函数。虽然当你想将某些东西放入浏览器时它工作得很好,但当我尝试时,setData 在每个浏览器中的工作方式不同,很可能是出于安全原因。

我用了ClipSpy用于检查剪贴板数据并使用此 html/js:

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
</head>
<body>
<div id="drag1" draggable="true">
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</div>
</body>
</html>

<script>
document.getElementById( 'drag1' ).addEventListener( 'dragstart', function drag( ev ) {

// Create data transfer facade so we can set custom data types (like 'commet').
//ev.dataTransfer.setData("text/plain", ev.target.id);
ev.dataTransfer.setData("FileNameW", "\\fileserver\SampleVideo\Test.avi" );
ev.dataTransfer.setData( "SomeData", "true" );
//ev.dataTransfer.setData("text/html", "<p>Example paragraph</p>");
//ev.dataTransfer.setData("text/uri-list", "http://developer.mozilla.org");
// Some text need to be set, otherwise drop event will not be fired.

},false);
</script>

当检查从 Chrome 拖放时,我看到我的所有数据都进入“chromium web 自定义 mime 数据格式”,而在 Firefox 中数据按预期设置。 IE11 根本没有设置任何数据(也设置了 untrusteddragdata)。

从 Chrome 中提取 ClipSpy: Chromium DragData

从 Firefox 中提取 ClipSpy: Firefox DragData

由于 Firefox 似乎支持在 javascript 中设置 CF_HDROP,我尝试添加一个本地文件的路径,这样当我将它拖到桌面时,它会将文件复制到桌面。我无法让它发挥作用。

在考虑如何在 Chrome 上执行此操作时,我在 Chromium issues: 中找到了一个示例脚本

<html>
<head>
<title>Download drag-out test</title>

<script type="text/javascript">

function handleDragStart(evt)
{
var url = document.getElementById("downloadUrl").value;
if (url.length > 0) {
var parts = url.split("/");
evt.dataTransfer.setData("DownloadURL", "application/octet-stream:" + parts[parts.length - 1] + ":" + url);
}
}

function init()
{
var download = document.getElementById("download");
download.draggable = true;
download.ondragstart = handleDragStart;
}

</script>

</head>

<body onload="init()">

Enter the file URL: <input id="downloadUrl" type="text" style="width: 500px;" value="http://www.google.com/favicon.ico" /><br />
<br />

<div id="download" style="width: 400px; border: 1px solid #000; background: #ccc; padding: 10px;">Drag this box out of the browser to download the file above</div>

</body>
</html>

当我在 chrome 上测试它时,它以某种方式将 downloadUrl 转换为 CF_HDROP 并下载链接中的文件。然而它只能在 chromium 中工作,我试图找到它的文档或使用本地文件或自定义数据的方法,但无论如何都失败了。

关于Javascript CF_HDROP 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34141812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com