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

<b>&lt;!DOCTYPE html&gt;</b>

<b>&lt;! —</b>

<b>Это модуль поиска на сайте Twitter. Модуль можно подключить к любой странице внутри элемента &lt;iframe&gt; и запросить его выполнить поиск, отправив ему строку запроса с помощью метода postMessage(). Поскольку модуль подключается в элементе &lt;iframe&gt;, а не &lt;script&gt;, он не сможет получить доступ к содержимому вмещающего документа.</b>

<b>--&gt;</b>

<b>&lt;html&gt;</b>

<b>&lt;head&gt;</b>

<b>  &lt;style&gt;body { font: 9pt sans-serif: }&lt;/style&gt;</b>

<b>  &lt;!-- Подключить библиотеку jQuery ради ее утилиты jQuery.getJSON() --&gt;</b>

<b>  &lt;script src=&quot;</b><a href="http://code.jquery.com/jquery-1.4.4.min.js%22/%3e%3c/script"><b>http://code.jquery.com/jquery-1.4.4.min.js&quot;/&gt;&lt;/script</b></a><b>&gt;</b>

<b>  &lt;script&gt;</b>

<b>    // Можно было бы просто использовать свойство window.onmessage,</b>

<b>    // но некоторые старые броузеры (такие как Firefox 3) не поддерживают его,</b>

<b>    // поэтому обработчик устанавливается таким способом,</b>

<b>    if (window.addEventListener)</b>

<b>      window.addEventListener(&quot;message&quot;, handleMessage, false);</b>

<b>    else</b>

<b>      window.attachEvent(&quot;onmessage&quot;, handleMessage); // Для IE8</b>

<b>    function handleMessage(e) {</b>

<b>      // Нас не волнует происхождение документа, отправившего сообщение:</b>

<b>      // мы готовы выполнить поиск на сайте Twitter для любой страницы.</b>

<b>      // Однако сообщение должно поступить от окна, вмещающего этот модуль,</b>

<b>      if (е.source !== window.parent) return;</b>

<b>      var searchterm = e.data; // Это фраза, которую требуется отыскать</b>

<b>      // С помощью утилит поддержки Ajax из библиотеки jQuery и прикладного</b>

<b>      // интерфейса Twitter отыскать сообщения, соответствующие фразе.</b>

<b>      jQuery.getJS0N(&quot;</b><a href="http://search.twitter.com/search.json?callback="><b>http://search.twitter.com/search.json?callback=</b></a><b>?&quot;,</b>

<b>                     { q: searchterm },</b>

<b>                     function(data) { // Вызывается с результатами запроса</b>

<b>                       var tweets = data.results;</b>

<b>                       // Создать HTML-документ для отображения результатов</b>

<b>                       var escaped = searchterm.replace(&quot;&lt;&quot;, &quot;&lt;”);</b>

<b>                       var html = &quot;&lt;h2&gt;&quot; + escaped + &quot;&lt;/h2&gt;&quot;;</b>

<b>                       if (tweets.length == 0) {</b>

<b>                         html += &quot;No tweets found&quot;;</b>

<b>                       }</b>

<b>                       else {</b>

<b>                         html += &quot;&lt;dl&gt;&quot;; // &lt;dl&gt; list of</b>
<b> results</b>

<b>                         for(var і = 0; і &lt; tweets.length; i++) {</b>

<b>                           var tweet = tweets[i];</b>

<b>                           var text = tweet.text;</b>

<b>                           var from = tweet.from_user;</b>

<b>                           var tweeturl = &quot;</b><a href="http://twitter.eom/#!/"><b>http://twitter.eom/#!/</b></a><b>&quot; + from +</b>

<b>                             &quot;/status/&quot; + tweet.id_str;</b>

<b>                             html += &quot;&lt;dt&gt;&lt;a target='_blank‘ href=&quot;' +</b>

<b>                             tweeturl + &quot;'&gt;&quot; + tweet.from_user +</b>

<b>                             &quot;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&quot; + tweet.text + &quot;&lt;/dd&gt;&quot;;</b>

<b>                         }</b>

<b>                         html += &quot;&lt;/dl&gt;&quot;;</b>

<b>                       }</b>

<b>                       // Вставить документ в &lt;iframe&gt;</b>

<b>                       document.body.innerHTML = html;</b>

<b>      });</b>

<b>    }</b>

<b>    $(function() {</b>

<b>      // Сообщить вмещающему документу, что модуль готов к поиску. Вмещающий документ</b>

<b>      // не может отправлять модулю сообщения до получения этого сообщения, потому что</b>

<b>      // модуль еще не готов принимать сообщения. Вмещающий документ может просто</b>