IE11接受来自另一个浏览器窗口的文件链接的拖放操作

时间:2019-03-04 17:10:11

标签: javascript asp.net html5 drag-and-drop internet-explorer-11

我们的用户需要将文件从政府网站传输到我们内部的基于Web的应用程序中。他们每天需要移动数十个文件,直到现在,他们一直在单击政府网站上的每个文件链接,将文件保存到本地的“下载”文件夹中,然后从那里将其上传到我们的Web应用程序。

为简化流程,我编写了代码,允许他们将文件链接直接从政府网站拖到Web应用程序上的拖放区。我从JS中放置区域的放置事件中获取文件的URL,然后在.NET的WebClient.DownloadFile()方法中使用该URL将文件拖入我们的Web应用程序。

即使将链接从一个浏览器窗口(政府网站)拖动到另一个浏览器窗口(我们的内部Web应用程序),此代码在Edge中也能很好地工作。 Chrome和Firefox也一样。 IE11,但是,不起作用。这是一个问题,因为许多用户需要使用IE11才能向后兼容我们仍在大量使用的旧版SharePoint。

当文件的链接被放在放置区域时,IE11不会获取文件URL。而是,IE11会将链接删除视为您单击文件链接一样。换句话说,它尝试在本地下载文件。 SO上有一个number of posts通常可以解决此问题,some seem to indicate指出,即使对于IE11,正确的选项组合也应该有效,但是在任何情况下我都无法让IE11进行合作

下面是一些示例代码,演示了该行为(以及用于测试该行为的JS Bin):

<!DOCTYPE html>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>Drag/Drop Test</title>
    <style>
        #dropArea {
           width: 300px; 
           height: 200px; 
           margin-bottom: 40px; 
           border: 1px dashed;
        }
    </style>
</head> 

<body>

    <div id="dropArea">Drop dragged links here</div>
    <a href="https://stackoverflow.com">This is a test link to Stack Overflow</a>

    <script type="text/javascript">
        var dropArea = document.getElementById('dropArea');

        dropArea.addEventListener('dragenter', function (evt) { evt.stopPropagation(); evt.preventDefault(); }, false);
        dropArea.addEventListener('dragexit', function (evt) { evt.stopPropagation(); evt.preventDefault(); }, false);
        dropArea.addEventListener('dragleave', function (evt) { evt.stopPropagation(); evt.preventDefault(); }, false);
        dropArea.addEventListener('dragover', function (evt) { evt.stopPropagation(); evt.preventDefault(); }, false);
        dropArea.addEventListener('drop', dropHandler, false);

        function dropHandler(evt) {
            evt.stopPropagation();
            evt.preventDefault();
            var droppedObjectURL = evt.dataTransfer.getData('Text');
            alert("droppedObjectURL=" + droppedObjectURL);
        }
    </script>

</body>
</html> 

要进行测试,请在一个Chrome / FF / Edge窗口中打开JS Bin,然后打开第二个Chrome / FF / Edge窗口至包含可下载文件的任何页面(请确保对两个浏览器使用相同的浏览器样式视窗)。将文件链接从一个窗口拖动到另一个窗口的放置区域。在Chrome / FF / Edge中,它应该显示带有文件链接URL的弹出警报。但是,在IE11中,它会在尝试下载文件时询问您是否要打开或保存文件。

以前解决这个IE11问题的大多数SO帖子都有很多年了,所以我希望新的东西浮出水面,从而可以在IE11中使用。如果本机无能为力,我也欢迎第三方解决方案。

0 个答案:

没有答案