Нашим пользователям необходимо перенести файлы с правительственного веб-сайта в наше собственное веб-приложение.Им нужно перемещать десятки файлов в день, и до сих пор они нажимали на каждую ссылку на файл на правительственном веб-сайте, сохраняли файлы в своей локальной папке «Загрузки» и затем загружали их в наше веб-приложение оттуда.
Чтобы упростить процесс, я написал код, позволяющий им перетаскивать ссылки на файлы прямо с правительственного веб-сайта в зону размещения нашего веб-приложения.Я извлекаю URL-адрес файла из события drop зоны перетаскивания в JS, а затем использую этот URL-адрес в методе .NET WebClient.DownloadFile () для извлечения файла в наше веб-приложение.
Этот код прекрасно работает в Edge, дажепри перетаскивании ссылок из одного окна браузера (правительственного веб-сайта) в другое окно браузера (наше собственное веб-приложение).Chrome тоже работает, как и Firefox.IE11, однако, не работает.Это проблема, потому что многим нашим пользователям необходимо использовать IE11 для обратной совместимости с устаревшей версией SharePoint, которую мы все еще активно используем.
IE11 не захватывает URL-адрес файла, когда ссылка на файл сбрасываетсязона падения.Вместо этого IE11 обрабатывает удаление ссылки, как если бы вы щелкнули ссылку на файл.Другими словами, он пытается загрузить файл локально.Существует число сообщений на SO, которые обычно решают эту проблему, и некоторые, кажется, указывают , что правильная комбинация опций должна работать даже для 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>
Чтобы проверить, откройте JS Bin в одном окне Chrome / FF / Edge, затем откройте второе окно Chrome / FF / Edge для любой страницы с загружаемым файлом (убедитесь, что вы используете тот же вариант браузера дляоба окна).Перетащите ссылку на файл из одного окна и поместите ее в зону добавления другого окна.В Chrome / FF / Edge должно отображаться всплывающее предупреждение с URL-адресом ссылки на файл.В IE11, однако, он спросит, хотите ли вы открыть или сохранить файл вместо этого, поскольку он пытается загрузить файл.
Большинству предыдущих сообщений SO, посвященных этой проблеме IE11, было много лет, поэтому яЯ надеюсь, что появилось что-то новое, что позволит это работать в IE11.Я также открыт для сторонних решений, если ничего не может быть сделано.