JavaScript. Подробное руководство, 6-е издание
Шрифт:
Пример 22.4. Модуль поиска на сайте Twitter с помощью метода postMessage
<!DOCTYPE html>
<! —
Это модуль поиска на сайте Twitter. Модуль можно подключить к любой странице внутри элемента <iframe> и запросить его выполнить поиск, отправив ему строку запроса с помощью метода postMessage. Поскольку модуль подключается в элементе <iframe>, а не <script>, он не сможет получить доступ к содержимому вмещающего документа.
– ->
<html>
<head>
<style>body { font: 9pt sans-serif: }</style>
<!-- Подключить библиотеку jQuery ради ее утилиты jQuery.getJSON -->
<script src=" http://code.jquery.com/jquery-1.4.4.min.js"/></script >
<script>
// Можно было бы просто использовать свойство window.onmessage,
// но некоторые старые броузеры (такие как Firefox 3) не поддерживают его,
// поэтому обработчик устанавливается таким способом,
if (window.addEventListener)
window.addEventListener("message", handleMessage, false);
else
window.attachEvent("onmessage", handleMessage); // Для IE8
function handleMessage(e) {
// Нас не волнует происхождение документа, отправившего сообщение:
// мы готовы выполнить поиск на сайте Twitter для любой страницы.
// Однако сообщение должно поступить от окна, вмещающего этот модуль,
if (е.source !== window.parent) return;
var searchterm = e.data; // Это фраза, которую требуется отыскать
// С помощью утилит поддержки Ajax из библиотеки jQuery и прикладного
// интерфейса Twitter отыскать сообщения, соответствующие фразе.
jQuery.getJS0N(" http://search.twitter.com/search.json?callback= ?",
{ q: searchterm },
function(data) { // Вызывается с результатами запроса
var tweets = data.results;
// Создать HTML-документ для отображения результатов
var escaped = searchterm.replace("<", "<”);
var html = "<h2>" + escaped + "</h2>";
if (tweets.length == 0) {
html += "No tweets found";
}
else {
html += "<dl>"; // <dl> list of
results
for(var і = 0; і < tweets.length; i++) {
var tweet = tweets[i];
var text = tweet.text;
var from = tweet.from_user;
var tweeturl = " http://twitter.eom/#!/ " + from +
"/status/" + tweet.id_str;
html += "<dt><a target='_blank‘ href="#"text_code"> tweeturl + "'>" + tweet.from_user +
"</a></dt><dd>" + tweet.text + "</dd>";
}
html += "</dl>";
}
// Вставить документ в <iframe>
document.body.innerHTML = html;
});
}
$(function {
// Сообщить вмещающему документу, что модуль готов к поиску. Вмещающий документ
// не может отправлять модулю сообщения до получения этого сообщения, потому что
// модуль еще не готов принимать сообщения. Вмещающий документ может просто
// дождаться события onload, чтобы определить момент, кода будут загружены
Поделиться:
Популярные книги
Кодекс Охотника. Книга XII
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Ожерелье Странника
Приключения:
исторические приключения
7.50
рейтинг книги
Эволюционер из трущоб. Том 12
12. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Лекарь Империи 15
15. Лекарь Империи
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
6.80
рейтинг книги
Измена. Свадьба дракона
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Солдат Империи
1. Страж
Фантастика:
попаданцы
альтернативная история
6.67
рейтинг книги
Инженер Петра Великого 2
2. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Третье правило диверсанта
Фантастика:
постапокалипсис
5.67
рейтинг книги
На границе империй. Том 10. Часть 4
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Цеховик. Книга 1. Отрицание
1. Цеховик
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Сирийский рубеж 2
6. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Я не царь. Книга XXIV
24. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Старая школа рул
1. Второгодка
Фантастика:
альтернативная история
6.00
рейтинг книги
Наследник
3. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00