JavaScript. Подробное руководство, 6-е издание
Шрифт:
* события onmouseover. Обработчик события выполняет HEAD-запрос с помощью
* объекта XMLHttpRequest, чтобы получить сведения о ресурсе, на который
* указывает ссылка, и сохраняет эту информацию в атрибуте title ссылки,
* благодаря чему эта информация будет отображаться во всплывающей подсказке.
*/
whenReady(function {
// Поддерживается ли возможность выполнения междоменных запросов?
var supportsCORS = (new XMLHttpRequest).withCredentials !== undefined;
// Обойти в цикле все ссылки в документе
var links = document.getElementsByTagName('a');
for(var і = 0; і < links.length; і++) {
var link = links[і];
if (!link.href) continue; // Пропустить якоря, не являющиеся ссылками
if (link.title) continue; // Пропустить ссылки с атрибутом title
// Если это междоменная ссылка
if (link.host!==location.host || link.protocol !== location.protocol)
{
link.title = "Ссылка на другой сайт"; // Предполагается, что нельзя
// получить дополнительную информацию
if (!supportsCORS) continue; // Пропустить, если заголовок
// C0RS не поддерживается
// Иначе есть надежда получить больше сведений о ссылке. Поэтому регистрируем
// обработчик события, который предпримет попытку сделать это.
}
// Зарегистрировать обработчик события, который получит сведения
// о ссылке при наведении на нее указателя мыши
if (link.addEventListener)
link.addEventListener("mouseover", mouseoverHandler, false);
else
link.attachEvent("onmouseover", mouseoverHandler);
}
function mouseoverHandler(e) {
var link = e.target || e.srcElement; // Элемент <a>
var url = link, liref; // URL-адрес ссылки
var req = new XMLHttpRequest; // Новый запрос
req.open("HEAD", url); // Запросить только заголовки
req.onreadystatechange = function { // Обработчик события
if (req.readyState !== 4) return; // Игнорировать незаверш. запросы
if (req.status === 200) { // В случае успеха
var type = req.getResponseHeader("Content-Type"); //Получить
var size = req.getResponseHeader("Content-Length"); //сведения
var date = req.getResponseHeader("Last-Modified"); //о ссылке
// Отобразить сведения во всплывающей подсказке,
link.title = "Тип: " + type + " \n" +
"Размер: " + size + " \n" + "Дата: " + date;
}
else {
// Если запрос не удался и подсказка для ссылки еще не содержит текст
// "Ссылка на другой сайт", вывести сообщение об ошибке,
if (!link.title)
link.title = "Невозможно получить сведения: \n" + req.status + " " + req.statusText;
}
};
req.send(null);
// Удалить обработчик: попытка получить сведения выполняется только один раз.
if (link.removeEventListener)
link.removeEventListener("mouseover", mouseoverHandler, false);
else
link.detachEvent("onmouseover", mouseoverHandler);
}
});
18.2. Выполнение НТТР-запросов с помощью <script>: JSONP
В начале этой главы упоминалось, что элемент
<script>
можно использовать в качестве Ajax-транспорта: достаточно установить атрибут src
элемента <script>
(и вставить его в документ, если он еще не внутри документа), и броузер сгенерирует HTTP-запрос, чтобы загрузить содержимое ресурса по указанному URL-адресу. Основная причина, почему элементы <script>
являются удобным Ajax-транспортом, состоит в том, что они не являются субъектами политики общего происхождения и их можно использовать для запроса данных с других серверов. Вторая причина состоит в том, что элементы <script>
автоматически декодируют (т. е. выполняют) тело ответа, содержащего данные в формате JSON.
Поделиться:
Популярные книги
Ботаник 2
2. Ботаник
Фантастика:
фэнтези
боевая фантастика
6.00
рейтинг книги
Дважды одаренный. Том II
2. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Интриганка
Приключения:
исторические приключения
9.24
рейтинг книги
Эволюционер из трущоб. Том 11
11. Эволюционер из трущоб
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Источник
11. Бедовый
Фантастика:
юмористическое фэнтези
городское фэнтези
мистика
7.00
рейтинг книги
На границе империй. Том 10. Часть 13
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Последний Паладин. Том 13
13. Путь Паладина
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сапер
1. Сапер
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.29
рейтинг книги
На границе империй. Том 6
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
Александр Агренев. Трилогия
Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Путь к бессмертию 2
2. Девятихвостый Богатырь
Фантастика:
попаданцы
сказочная фантастика
фэнтези
5.00
рейтинг книги
Второгодка. Книга 2. Око за око
2. Второгодка
Фантастика:
героическая фантастика
альтернативная история
фэнтези
5.00
рейтинг книги
Рядовой. Назад в СССР. Книга 1
1. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
На цепи
1. На цепи
Старинная литература:
прочая старинная литература
5.00