Шрифт:
var types = e.dataTransfer.types;
if (!types ||
(types.contains && types.contains("Files")) ||
(types.indexOf && types.indexOf("Files") != -1)) {
droptarget.classList.add("active"); // Выделить элемент droptarget
return false; // Нас интересует
} // буксируемый объект
};
// Снимает выделение площадки сброса, как только пользователь
// отбуксирует файл за ее пределы
droptarget.ondragleave = function {
droptarget.classList.remove("active");
};
// Этот обработчик просто сообщает броузеру продолжать посылать события
droptarget.ondragover = function(e) { return false; };
// Когда пользователь сбросит файлы, необходимо получить их URL-адреса
// и отобразить миниатюры,
droptarget.ondrop = function(e) {
var files = e.dataTransfer.files; // Сброшенные файлы
for(var і = 0; і < files.length; i++) { // Обойти все файлы в цикле
var type = files[і].type;
if (type.substrings,6) !== "image/") // Пропустить не являющиеся
continue; // изображениями
var img = document.createElement("img"); // Создать элемент <img>
img.src = getBlobURL(files[i]); // URL blob:
// в <img>
img.onload = function { // После загрузки изобр.
this.width = 100; // установить его размеры
document.body.appendChild(this); // и вставить в документ.
revokeBlobURL(this.src); // Предотвратить утечки памяти!
}
}
droptarget.classList.remove("active"); //Снять выделение
return false; // Событие сброса обработано
}
};
</script>
<style> /* Простые стили для оформления площадки сброса */
#droptarget { border: solid black 2px; width: 200px; height: 200px; }
#droptarget.active { border: solid red 4px; }
</style>
</head>
<body> <!-- Изначально в документе имеется только площадка сброса -->
<div id="droptarget">C6pocbTe сюда файлы изображений</div>
</body>
</html>
URL-адреса двоичных объектов имеют то же происхождение (раздел 13.6.2), что и сценарии, создавшие их. Это делает их более универсальными по сравнению с URL-адресами file://, которые имеют иное происхождение, из-за чего последние сложнее использовать в веб-приложениях. URL-адреса двоичных объектов считаются допустимыми только в документах с общим происхождением. Если, например, с помощью метода
postMessage
передать URL-адрес двоичного объекта в окно с документом, имеющим другое происхождение, для этого окна URL-адрес будет бессмысленным.