Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

var getBlobURL = (window.URL && URL.createObjectURL.bind(URL)) ||

(window.webkitURL && webkitURL.createObjectURL.bind(webkitURL)) ||

window.createObjectURL;

Фоновые потоки выполнения также могут использовать этот прикладной интерфейс и обращаться к тем же функциям, в том же объекте URL (или webkitURL).

Если передать двоичный объект функции

createObjectURL,
она вернет URL-адрес (в виде обычной строки). Этот адрес начинается с названия схемы blob://, за которой следует короткая строка, ссылающаяся на двоичный объект с некоторым уникальным идентификатором. Обратите внимание, что эти URL-адреса совершенно не похожи на URL-адреса data://, которые представляют свое собственное содержимое. URL-адрес, ссылающийся на двоичный объект, - это просто ссылка на объект
Blob
, хранящийся в памяти броузера или на диске. URL-адреса вида blob:// также отличаются от URL-адресов file://, которые ссылаются непосредственно на файл в локальной файловой системе, давая возможность увидеть путь к файлу, позволяя просматривать содержимое каталогов и тем самым затрагивая проблемы безопасности.

Пример 22.10 демонстрирует два важных приема. Во-первых, он реализует «площадку для сброса», которая обрабатывает события механизма буксировки мышью (drag-and-drop), имеющие отношение к файлам. Во-вторых, когда пользователь сбросит один или более файлов на эту «площадку», с помощью функции

createObjectURL
для каждого из файлов будет создан URL-адрес и элемент
<img>,
чтобы отобразить миниатюры изображений, на которые ссылаются эти URL-адреса.

Пример 22.10. Отображение файлов изображений с использованием URL-adpecoe двоичных объектов

<!DOCTYPE html>

<html><head>

<script>

// На момент написания этих строк создатели Firefox и Webkit еще не пришли

// к соглашению об именовании функции createObjectURL

var getBlobURL = (window.URL && URL.createObjectURL.bind(URL)) ||

(window.webkitURL && webkitURL.createObjectURL.bind(webkitURL)) ||

window.createObjectURL;

var revokeBlobURL = (window.URL && URL.revokeObjectURL.bind(URL)) ||

(window.webkitURL && webkitURL.revokeObjectURL.bind(webkitURL)) ||

window.revokeObjectURL;

// После загрузки документа добавить обработчики событий к элементу droptarget,

// чтобы он мог обрабатывать сбрасываемые файлы

window.onload = function {

// Отыскать элемент, к которому следует добавить обработчики
событий,

var droptarget = document.getElementByld("droptarget");

// Выделяет элемент droptarget изменением рамки, когда пользователь

// буксирует файлы над ним.

droptarget.ondragenter = function(e) {

// Игнорировать, если буксируется что-то иное, не являющееся файлом.

// Когда будет реализована поддержка атрибута dropzone, определяемого

// спецификацией HTML5, это позволит упростить обработчик,

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:

Поделиться:
Популярные книги

Казань

Вязовский Алексей
2. Русский бунт
Фантастика:
альтернативная история
4.50
рейтинг книги
Казань

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Князь Целитель 4

Ткачев Андрей Юрьевич
4. Князь Целитель
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Князь Целитель 4

Последний реанорец. Том IX

Павлов Вел
8. Высшая Речь
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Последний реанорец. Том IX

За Горизонтом

Вайс Александр
8. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
За Горизонтом

Ермак. Противостояние. Книга одиннадцатая

Валериев Игорь
11. Ермак
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Ермак. Противостояние. Книга одиннадцатая

Кодекс Охотника. Книга ХХ

Винокуров Юрий
20. Кодекс Охотника
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга ХХ

Бастард Императора. Том 9

Орлов Андрей Юрьевич
9. Бастард Императора
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Бастард Императора. Том 9

Камень. Книга вторая

Минин Станислав
2. Камень
Фантастика:
фэнтези
8.52
рейтинг книги
Камень. Книга вторая

Последний Паладин. Том 9

Саваровский Роман
9. Путь Паладина
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 9

Неучтенный элемент. Том 10

NikL
10. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 10

Он тебя не любит(?)

Тоцка Тала
Любовные романы:
современные любовные романы
7.46
рейтинг книги
Он тебя не любит(?)

Кодекс Охотника. Книга XIII

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

Иной. Том 1. Школа на краю пустыни

Amazerak
1. Иной в голове
Фантастика:
боевая фантастика
рпг
аниме
5.75
рейтинг книги
Иной. Том 1. Школа на краю пустыни