<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0"
 xmlns:blogChannel="http://backend.userland.com/blogChannelModule"
>

<channel>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430; &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;!</title>
<link>http://maillist.ru/55140</link>
<description>&#x412; &#x43D;&#x430;&#x448;&#x435;&#x439; &#x440;&#x430;&#x441;&#x44B;&#x43B;&#x43A;&#x435; &#x432;&#x44B; &#x443;&#x437;&#x43D;&#x430;&#x435;&#x442;&#x435; &#x43E; &#x440;&#x430;&#x437;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x445; &#x442;&#x43E;&#x43D;&#x43A;&#x43E;&#x441;&#x442;&#x44F;&#x445;, &#x43D;&#x44E;&#x430;&#x43D;&#x441;&#x430;&#x445; &#x438; &#x442;&#x440;&#x44E;&#x43A;&#x430;&#x445; &#x432;&#x435;&#x431;-&#x434;&#x438;&#x437;&#x430;&#x439;&#x43D;&#x430;, &#x432;&#x435;&#x431;-&#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x438; &#x432;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x432; &#x446;&#x435;&#x43B;&#x43E;&#x43C;. &#x41E;&#x445;&#x432;&#x430;&#x442; &#x442;&#x435;&#x43C; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x448;&#x438;&#x440;&#x43E;&#x43A; - &#x43E;&#x442; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x432; &#x433;&#x440;&#x430;&#x444;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x440;&#x435;&#x434;&#x430;&#x43A;&#x442;&#x43E;&#x440;&#x430;&#x445;, &#x434;&#x43E; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43F;&#x43E;&#x434; AJAX &#x438; ASP.NET.</description>
<language>ru</language>

<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! &#x415;&#x449;&#x435; &#x43F;&#x430;&#x440;&#x430; &#x442;&#x440;&#x44E;&#x43A;&#x43E;&#x432;
</title>
<link>http://archives.maillist.ru/55140/1273921.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
    
<table width="100%" summary="" cellspacing="3" cellpadding="3" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ;"><h1>DOM: вытаскиваем текст вне тегов</h1>
<p>Данная публикация открывает новую рубрику в блоге. Рубрика называется &quot;Кратко&quot;. В ней я буду публиковать совсем кратенькие статьи - рецепты, темы для которых чаще всего буду брать из статистики поискового трафика. То есть, если я вижу, что человек пришел на мой сайт по некоему запросу, и ответа на вопрос на моем сайте нет, то я буду писать на них ответы и может когда-нибудь мой ответ пригодится.</p>

<p>Анализируя поисковый трафик, я обнаружил вопрос &quot;вытащить текст вне тегов&quot;, делюсь рецептом. Собственно, каждая ситуация уникальна, но в общем случае, нужно отыскать в DOM-структуре некий строго определенный элемент и уже относительно него отыскать нужный нам текст.</p>

<p>В нашем случае документ представляет собой два дива с заданными строго идентификаторами, между которыми расположен искомый текстовый элемент.  При помощи getElementById мы на ходим элемент div1, а затем при помощи nextSibling добираемся до текстового узла, ведь он стоит следующим в DOM-структуре. Получить его значение можно при помощи свойства nodeValue.</p>

<p>Вот и весь рецепт.</p>
<em><pre name="code" class="html">&lt;html&gt;<br />&lt;head&gt;<br /> &lt;title&gt;Hello!&lt;/title&gt;<br /> &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;<br /> &lt;script type=&quot;text/javascript&quot;&gt;<br /> function getText()<br /> {<br /> var div1 = document.getElementById(&quot;div1&quot;);<br /> div1.nextSibling.nodeValue = &quot;Поменял текст&quot;;<br /> }<br /> &lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;div id=&quot;div1&quot;&gt;Предшествующий
блок&lt;/div&gt;<br />Это текст я хочу получить<br />&lt;div id=&quot;div2&quot;&gt;Замыкающий блок&lt;/div&gt;<br />&lt;input type=&quot;button&quot; value=&quot;Start!&quot; onclick=&quot;getText()&quot;&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</pre></em>

<h1>DIV всплывающий поверх flash-баннера</h1>
<p>В процессе создания сайтов, столкнулся однажды с проблемой выражаемой в том, что flash-баннер, размещенный на странице, закрывает собой всплывающий DIV содержащий в себе меню навигации.</p>

<p>Сам этот DIV имеет z-index больше нуля, и когда на странице нет никакой Flash-анимации, этот DIV плавает поверх страницы. Однако, как только появляется Flash-баннер, то баннер этот рендерится поверх любых плавающих DIV-ов.</p>

<p>Как и все гениальное, решение оказалось простым. Достаточно тегам OBJECT и EMBED добавить атрибут wmode со значение opaque.</p>

<p>Выглядеть это должно как-то так:
<em><pre name="code" class="html">&lt;OBJECT wmode=&quot;opaque&quot; ...&gt;<br />&lt;EMBED ...&gt;<br />&lt;PARAM name=&quot;wmode&quot; value=&quot;opaque&quot;&gt;<br />&lt;/EMBED&gt;<br />&lt;/OBJECT&gt;</pre></em></p>
<p>А связано это с тем, что по умолчанию, параметр этот принимает значение <em>window</em>, а это говорит браузеру, что флешку необходимо отрисовывать поверх страницы и всего, что на ней находится. Другие значения параметра <em>wmode - opaque и transparent</em>. Последний ко всему прочему позволяет задавать прозрачный фон для DIV'а, отображаемого поверх флешки. Учтите, что подобные игры с прозрачностью могут заметно ухудшать производительность работы браузера.</p>
<br /><br /><br />
<!-- " ' --></td>
</tr>
</table>
</table>
</center>]]></description>
<guid isPermaLink="false">1273921</guid>
<pubDate>&#x447;&#x442;, 26 &#x430;&#x432;&#x433; 2010 11:46:03 MSD</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! &#x41A;&#x440;&#x43E;&#x441;&#x434;&#x43E;&#x43C;&#x435;&#x43D;&#x43D;&#x430;&#x44F; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x447;&#x430; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x43C;&#x435;&#x436;&#x434;&#x443; html-&#x441;&#x442;&#x440;&#x430;&#x43D;&#x438;&#x446;&#x430;&#x43C;&#x438;
</title>
<link>http://archives.maillist.ru/55140/1211273.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
    
<table width="100%" summary="" cellspacing="3" cellpadding="3" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ;"><h1>Кросдоменная передача данных между html-страницами</h1>
<p>
Итак, представим себе ситуацию, что на некотором сайте в некоторой форме есть поле, в которое нужно ввести логин пользователя, но не свой собственный, а чужой логин, предположим, пользователя, которого надо добавить в друзья или в черный список. Но посетитель может не помнить наизусть, как пишется этот логин, а потому мы сделаем так, чтобы он мог выбрать его из списка, причем список этот должен открыться в отдельном окне и там помимо списка логинов пользователей должны отображаться еще и их фотографии, ФИО,
возраст и т.д. Предположим, что мы даже создали такую страницу со списком пользователей. Возникает вопрос - <em>как передать из одного окна браузера в другое окно некоторые данные</em> (в данном случае это - логин пользователя)?</p>

<p>Справочник по JavaScript и объектной документной модели DOM говорит нам, что для открытия нового окна нужно использовать метод <strong>window.open()</strong>, а для доступа из "дочернего" окна в "родительское" (то есть то, которое и породило новое окно) нужно использовать указатель <strong>opener</strong>.</p>

<p>Здесь все просто, и я не стал бы писать эту статью, если бы хотел рассказать только про это.</p>

<p>А хочу я теперь рассказать о том, как быть если окна эти расположены в разных доменах. Когда такое может произойти? Предположим, есть Ваш форум, а есть специализированный сервис для загрузки и хранения фотографий и вот теперь владелец форума хочет договориться с владельцем фото-сервиса, что на форму он разместит кнопку "Добавить изображение", которая будет открывать окно созданное в рамках фото-сервиса, в этом окне пользователь загрузит фотографии, а затем по нажатию кнопки "ОК" ссылки на фотографии скопируются
в окно редактирования сообщения на форуме. Как видим, здесь есть два окна в разных доменах и нам нужно передать текст из одного окна в другое.</p>

<p>"Что тут сложного?" - спросите вы. А давайте попробуем.</p>

<p>Продолжение статьи <a href='http://easy4web.ru/?p=836'>"Кросдоменная передача данных между html-страницами"</a>, а также другие статьи, посвященные веб-разработке, вы можете прочитать на сайте <a href='http://easy4web.ru/'>"Веб-разработка? Это просто!"</a></p>
<!-- " ' --></td>
</tr>
</table>
</table>
</center>]]></description>
<guid isPermaLink="false">1211273</guid>
<pubDate>&#x447;&#x442;, 29 &#x430;&#x43F;&#x440; 2010 17:11:09 MSD</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! &#x412; &#x43D;&#x430;&#x448;&#x435;&#x43C; &#x431;&#x43B;&#x43E;&#x433;&#x435; &#x43F;&#x43E;&#x44F;&#x432;&#x438;&#x43B;&#x441;&#x44F; &#x444;&#x43E;&#x440;&#x443;&#x43C;.
</title>
<link>http://archives.maillist.ru/55140/1181881.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;"><h1>В нашем блоге появился форум.</h1><br/><br/>
<a href="http://easy4web.ru/forum/">Ссылка на форум</a>
<!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">1181881</guid>
<pubDate>&#x432;&#x442;, 16 &#x43C;&#x430;&#x440; 2010 22:15:40 MSK</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! &#x412; &#x43D;&#x430;&#x435;&#x448;&#x43C; &#x431;&#x43B;&#x43E;&#x433;&#x435; &#x43F;&#x43E;&#x44F;&#x432;&#x438;&#x43B;&#x441;&#x44F; &#x444;&#x43E;&#x440;&#x443;&#x43C;.
</title>
<link>http://archives.maillist.ru/55140/1181879.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;"><h1>В нашем блоге появился форум. </h1><p>Именно так.</p><p><br />
Теперь вы можете не только комментировать наши статьи, но и создавать 
собственные посты. Если вас интересует любой вопрос связанный с 
веб-разработкой, мы и наши посетители постараемся на него ответить.</p><p><br />
Если вам есть что сказать &ndash; пишите на форуме. Добро пожаловать.
</p>
<!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">1181879</guid>
<pubDate>&#x432;&#x442;, 16 &#x43C;&#x430;&#x440; 2010 22:09:37 MSK</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! &#x420;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44F; &#x447;&#x430;&#x442;&#x430; &#x43D;&#x430; ASP.NET &#x441; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C; Long Polling
</title>
<link>http://archives.maillist.ru/55140/1179838.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;"><h1>Реализация чата на ASP.NET с использованием Long Polling</h1>
<p>
Бродя по просторам интернета, на одном из сайтов я увидел простой чат. Просмотрев страницу в <em>FireBug </em>я понял, что никакими апплетами там и не пахнет, а значит чат реализован на простом <em>JavaScript</em>.</p><p>

Я подключился к нему из нескольких браузеров и удивился, что второй браузер реагирует на сообщения первого практически мгновенно, что напрочь исключало возможность работы этого чата при помощи периодического опроса сервера скриптом на клиентской странице. Ну, или частота этого опроса должна быть настолько высокой, что любой сервер бы просто захлебнулся в этих запросах.</p><p>

И встал передо мной вопрос - как они это сделали? Как они обеспечили такую высокую скорость отдачи свежих данных? Ведь веб-сервер на то и сервер, что может лишь отвечать на запросы пользователя, но уж никак не самостоятельно инициировать запросы.
</p><p>
Непродолжительный поиск по интернетам дал мне ответ. И ответ этот "<strong>Long Polling</strong>", а встречается еще и другое название технологии - <strong>Comet</strong>.
</p><p>
Итак, как же это работает?
</p><p>
По сути, это все тот же старый добрый <em>AJAX</em>, и использование объекта <strong>XmlHttpRequest</strong>. С одной большой разницей, заключенной на серверной стороне. Разница состоит вот в чем. Клиент посылает <em>XHR</em>-запрос и длительное время ожидает ответа сервера. А "длительное время" отклика обеспечивает сам сервер, который не сразу отдает данные клиенту, а лишь только тогда, когда у него в очереди появляются свежие данные, то есть когда ему действительно есть что сказать.
</p><p>
Клиент, дождавшись ответа, обрабатывает его (например, отображает сообщение на странице), а затем, без промедления, снова запрашивает сервер. И снова ждет.
</p><p>
Если же подав запрос клиент так и не дождался ответа из-за таймаута, то он снова запрашивает сервер. А откуда этот таймаут? А просто серверу нам нечего ответить, вот он и не отдает клиенту результат запроса. Ждет. Но не дождавшись, разрывает соединение по таймауту. Такая вот несложная схема.
</p><p>
Это и называется <strong>Long Polling</strong>, то есть - <em>длительный опрос</em>.
</p><p>
Но от слов к делу. Сейчас мы изготовим серверную и клиентскую часть простого интернет-чата, построенного на описанной технологии. Мы подробно рассмотрим работу всего серверного и клиентского кода и даже в конце статьи получим ссылку на вполне работоспособный продукт. Сразу скажу, у него есть некоторые ограничения. Вы, например, не сможете его использовать в режиме сильной нагрузки, то есть наличии одновременно большого количества клиентов. В нем нет схемы очистки "потерянных" соединений. Это лишь работоспособный
учебный пример. Все недостающие аспекты кода предлагаю вам на самостоятельную доработку.
</p>
<p>Продолжение статьи <a href="http://easy4web.ru/?p=695">Реализация чата на ASP.NET с использованием Long Polling</a> вы можете прочитать на сайте <a href="http://easy4web.ru/">Веб-разработка? Это просто!</a></p>
<!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">1179838</guid>
<pubDate>&#x441;&#x431;, 13 &#x43C;&#x430;&#x440; 2010 21:31:30 MSK</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! easyAPI. &#x423;&#x434;&#x430;&#x43B;&#x435;&#x43D;&#x43D;&#x430;&#x44F; &#x437;&#x430;&#x433;&#x440;&#x443;&#x437;&#x43A;&#x430; XML.
</title>
<link>http://archives.maillist.ru/55140/1154425.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- #list {      
background-color:#F5F5F5;       
border:1px solid #EDEDED;       
font-family:courier,monospace;       
padding:10px;       
}       
       
span.drop {style.css (line 404)       
-x-system-font:none;       
color:#0019FF;       
float:left;       
font-family:tahoma,sans-serif;       
font-size:60px;       
font-size-adjust:none;       
font-stretch:normal;       
font-style:normal;       
font-variant:normal;       
font-weight:bold;       
line-height:0.83em;       
margin-right:5px;       
}       
       
#rap { 
background:transparent url(main.jpg) repeat-y scroll 0 0;       
border-left:3px solid #262626;       
border-right:3px solid #262626;       
margin:0 auto;       
text-align:left;       
width:900px;       
}       
#content { 
float:right;       
margin:0 20px 20px 8px;       
text-align:left;       
width:600px;       
}       
 .post {  
background:#FFFFFF none repeat scroll 0 0;       
border:1px solid #EDEDED;       
margin-bottom:20px;       
}       
 .storycontent { 
font-size:115%;       
padding-left:10px;       
padding-right:10px;       
}       
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;"><div id="rap">
<div id="content">
<div class="post">
<div class="storycontent">
<p>И вот, наконец, долгожданная, вторая статья из раздела <strong>easyAPI</strong>.</p>
<p>Сегодня мы узнаем, как загрузить <em>XML</em>-данные с <em>удаленного домена</em>. Подобная задача возникает, например, когда владелец сайта на бесплатном (а значит - без серверного кода) хостинге хочет вставить в страницу <em>погодный XML-информер</em>. Именно на этом примере мы и рассмотрим сегодня удаленную загрузку XML-файлов.</p>
<p>Итак, для фоновой загрузки данных мы привыкли использовать так называемый <strong>AJAX</strong>, то есть объект <strong>XMLHttpRequest</strong>, про эту технологию я уже не раз писал в статьях блога. Однако, эта технология в данном случае никуда не годится. Почему? А потому что объект XMLHttpRequest не позволяет делать запросы к доменам, иным, чем тот, в котором работает скрипт, создающий этот объект.</p>
<p>И здесь к нам на помощь приходит технология, получившая название <a href='http://ru.wikipedia.org/wiki/JSON#JSONP' target='_blank'>JSONP</a>, что значит <em>JavaScript Object Notation with Padding</em>. Про сам JSON можео почитать вот здесь <a href='http://ru.wikipedia.org/wiki/JSON' target='_blank'>JSON</a>, а JSONP представляет собой объект в нотации JSON обернутый в вызов функции, что-то вроде этого:
<pre name='code' class='javascript'>
onSuccess('JSON-object')
</pre></p>
<p>А теперь объясню, зачем это нужно. Хоть XMLHttpRequest и не позволяет делать запросы к удаленным доменам, однако все браузеры позволяют нам загружать JavaScript'ы с любых доменов, то есть страница, загруженная с домена localdomain.ru, позволяет выполнить в ее рамках следующую инструкцию:
&lt;script type='text/javascript' src='http://remotedomain.ru'&gt
&lt;/script&gt;</p>
<p>А теперь смотрите, что происходит. Наша страница загружает скрипт с удаленного домена, а скрипт этот возвращает нам JSONP-конструкцию, которая после загрузки скрипта тут же и выполнится, а значит, вызовет некую предопределенную заранее функцию onSuccess, которая получит в качестве аргумента тот самый XML-файл. И теперь мы можем делать с ним все, что захотим!</p>
<p>Осталось только одно - завладеть таким remotedomain.ru, который вернет нам то, что нам нужно. Скажу, что домен этот - <em>http://easyapi.ru</em>. Да-да, именно на этом, предусмотрительно приобретенном не так давно домене, и будут жить все наши полезные, жизненно необходимые почти каждому веб-разработчику, функции. :) Скромненько и со вкусом...</p>
<p>Статью <a href='http://easy4web.ru/?p=654' target='_blank'>"easyAPI. Удаленная загрузка XML."</a> и другие статьи, посвященные веб-разработке, Вы можете найти на сайте <a href='http://easy4web.ru' target='_blank'>Веб-разработка? Это просто!</a></p>

</div>
</div>
</div>
</div><!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">1154425</guid>
<pubDate>&#x43F;&#x43D;, 01 &#x444;&#x435;&#x432; 2010 10:47:03 MSK</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! &#x41A;&#x440;&#x43E;&#x441;&#x441;&#x431;&#x440;&#x430;&#x443;&#x437;&#x435;&#x440;&#x43D;&#x43E;&#x435; XSLT-&#x43F;&#x440;&#x435;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x432; JavaScript
</title>
<link>http://archives.maillist.ru/55140/1094415.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;"><h1>Кроссбраузерное XSLT-преобразование в JavaScript</h1>
<p>Столкнулся я однажды с необходимостью отобразить XML-данные погодного информера gismeteo посредством XSLT-шаблона. Причем возникла острая необходимость сделать это через  JavaScript, так как на предлагаемом бесплатном хостинге не было поддержки PHP, а значит отпарсить XML на сервере не представлялось возможным.</p>
<p>В результате этой острой необходимости родился код на JavaScript, который я и предлагаю на ваше рассмотрение.</p>
<pre class="javascript" name="code">function transformXslt(source,style) {<br />    if(window.ActiveXObject)<br />    {<br />        return source.transformNode(style);<br />    }<br />    else if(window.XSLTProcessor)<br />    {<br />        var xsltProcessor=new XSLTProcessor();<br />        xsltProcessor.importStylesheet(style);<br />        var resultDocument = xsltProcessor.transformToDocument(source);<br />        var xmls = new XMLSerializer();<br />        return xmls.serializeToString(resultDocument);<br
/>    }<br />    else<br />    {<br />        alert(&quot;Преобразование XML не поддерживается браузером&quot;);<br />        return null;<br />    }<br />}<br /></pre>
<p>Что мы здесь видим?</p>
<p>А видим мы здесь кроссбраузерное решение данной задачи. XSLT-преобразование в IE производится посредством метода <em>transformNode</em> XML-документа. Во всех остальных браузерах(FF, Chrome, Safari, Opera) XSLT-преобразование делается совсем по-другому. И делается оно посредством объекта <em>XSLTProcessor</em>, в который методом <em>importStylesheet</em> загружается файл стилей XSLT, а результирующий документ генерируется методом <em>transformToDocument(xml)</em>. И напоследок мы поручим объекту <em>XMLSerializer</em>
сгенерить строковое представление результирующего XML-документа.</p>
<p>И напоследок еще одна полезная, и такая же кроссбраузерная, функция, которая преобразует строковое представление XML (и XSLT)-документа собственно в сам документ, готовый для его дальнейшего использования.</p>
Продолжение статьи "<a href="http://easy4web.ru/?p=604">Кроссбраузерное XSLT-преобразование в JavaScript</a>" и многие другие статьи посвященные веб-разработке вы можете на сайте <a href="http://easy4web.ru">Веб-разработка? Это просто!</a>.
<!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">1094415</guid>
<pubDate>&#x432;&#x441;, 25 &#x43E;&#x43A;&#x442; 2009 15:15:05 MSK</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! &#x41A;&#x440;&#x43E;&#x441;&#x434;&#x43E;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x439; JavaScript (JSONP)
</title>
<link>http://archives.maillist.ru/55140/1087522.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;"><h1>Кросдоменный JavaScript (JSONP)</h1>
<p>Итак, мы уже научились использовать объект <strong>XMLHttpRequest</strong> для фоновой загрузки данных с сервера, этот подход подробно описан в статье <a href="http://easy4web.ru?p=213">AJAX. 1 &ndash; Что это такое?</a>. Однако, приведенный метод обладает одним недостатком - он не позволяет делать кроссдоменные запросы, то есть скрипт расположенный на домене <em>easy4web.ru</em> не может обратиться к домену <em>vision4web.ru</em>, а иногда этого так хочется. И здесь нам на помощь придет метод динамически
подгружаемых скриптов &lt;SCRIPT&gt;.</p>
<p>Как известно, HTML-элемент <em>&lt;SCRIPT&gt;</em> может загружаться и с чужого домена, то есть аттрибут <em>src</em> у него может указывать вообще на любой домен. При этом, сразу после загрузки в нашу страницу, скрипт начнет выполняться. Таким образом, вставив в этот скрипт вызов некой заранее известной функции, мы можем организовать оповещение страницы о том, что скрипт загружен и готов к выполнению работы. А данные для для скрипта можно упаковать в пакет <em>JSON</em>. Такой комбинированный подход носит
имя <strong><a href="http://ru.wikipedia.org/wiki/JSON#JSONP">JSONP</a> (JSON with padding)</strong>.</p>
<p>На клиентской стороне мы выполняем такой код:
<pre name='code' class='javascript'>  var script = document.createElement("script");
  script.src = 'http://mydomain.ru/script.php?callback=func1';
  script.type = 'text/javascript';
  document.body.appendChild(script);</pre></p>
<p>А по адресу  <em>http://mydomain.ru/script.php</em> поселим вот такой код:
<pre name='code' class='php'>&lt;?php
echo($_REQUEST['callback'].'({"result":"Успешно!"})');
?&gt;</pre></p>
<p>На клиентской стороне также существует такой callback (то есть функция, которая сработает после загрузки скрипта):
<pre name='code' class='javascript'>function func1(response)
{
  alert(response.result);
}</pre></p>
<p>Протестировать рабочий пример можно здесь: <a href="http://easy4web.ru/samples/jsonp/index.html" target='_blank'>http://easy4web.ru/samples/jsonp/index.html</a>, а скачать код вышеприведенного примера можно здесь: <a href="http://easy4web.ru/images/jsonp.zip" target='_blank'>http://easy4web.ru/images/jsonp.zip</a></p>
<p>В тестовом примере, как можно увидеть, не происходит кроссдоменной загрузки - мы загружаем с того же домена, где расположен скрипт. Но вы можете заменить <em>URL</em> в этом месте кода:
<pre name='code' class='html'>&lt;input type="button" value="Получить JSONP"
 onclick="getJSONP('http://easy4web.ru/samples/jsonp/handler.php',onSuccess)"/&gt;</pre> на ваш собственный или на наш тестовый handler, расположенный на другом домене, (вот здесь http://vision4web.ru/api/handler.php) и убедиться в том, что кроссдоменная загрузка прекрасно работает.</p>
Статью <a href='http://easy4web.ru/?p=598'>Кросдоменный JavaScript (JSONP)</a> Вы можете на нашем сайте <a href='http://easy4web.ru'>Веб-разработка? Это просто!</a>
<!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">1087522</guid>
<pubDate>&#x432;&#x442;, 13 &#x43E;&#x43A;&#x442; 2009 13:40:23 MSD</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! &#x41D;&#x430;&#x447;&#x438;&#x43D;&#x430;&#x435;&#x43C; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x430;&#x431;&#x43E;&#x440; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441;&#x43E;&#x432; easyAPI
</title>
<link>http://archives.maillist.ru/55140/1087021.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;"><h1>Начинаем создавать набор сервисов easyAPI</h1>
<p>Создавая статьи на темы, интересующие посетителей, отвечая на их комментарии, и даже выполняя платные заказы на эти темы я все больше понимал, что пора создавать некий набор сервисов и библиотек, реализующих насущные потребности пользователей веб-сайтов.</p>
<p>Собственно, этой статьей я начинаю публикацию на нашем ресурсе сервисов под общим названием <strong>easyAPI</strong>.</p>
<p>Что это будет?</p>
<p><strong>EasyAPI </strong>это по большей части <strong>JavaScript</strong>-библиотеки, реализующие ту или иную функциональность, я пока до конца не знаю, какие именно сервисы я буду предоставлять и в каком виде. Но точно знаю, что эти сервисы помогут, например, владельцу сайта, поднятого на бесплатном хостинге, отобразить погодный информер, настроенный полностью под требования веб-мастера. Или, например, позволят определить географию посетителей определенного сайта и отобразить ее на карте страны. Или, например,
отобразить посетителю сайта погодный информер именно его города. И все это, повторюсь, чаще всего будет возможно даже на хостинге без поддержки PHP. </p>
<p>Короче говоря, от слов к делу!</p>
<p>И сегодня на сайте easy4web.ru появляется первый такой сервис - <strong>GeoIP</strong>, позволяющий по адресу посетителя определить его приблизительное местоположение.</p>
<p>Он живет здесь <a href="http://easy4web.ru/api/geoip/get.php">http://easy4web.ru/api/geoip/get.php</a></p>
<p>Поддерживаемые параметры:
<strong>p - формат отдаваемых данных:</strong>
<ul>
<li>p=j - результат - JSON</li>
<li>p=a - результат - массив вида <em>cc2=RU;cc3=RUS;cty=Moskow</em></li>
<li>p=x - результат - XML</li>
<li>p=ax - результат - массив обернутый в <em>XML</em>, вида <em>&lt;easy&gt;cc2=RU;cc3=RUS;cty=Moskow&lt;/easy&gt;</em></li>
<li>p=jx - результат - <em>JSON </em>обернутый в <em>XML</em>, вида <em>&lt;easy&gt;cc2=RU;cc3=RUS;cty=Moskow&lt;/easy&gt;</em></li>
</ul>
<strong>f - длина имен полей:</strong>
<ul>
<li>f=f - длинные имена, вида <em>country_code</em></li>
<li>f=s - короткие имена, вида <em>cc2</em></li>
</ul>
<strong>ip - IP-адрес</strong>, если он не задан, то в качестве адреса берутся координаты сервера, с которого пришел запрос <em>REMOTE_ADDR</em>.</p><p></p>
<p>Если я желаю получить информацию по собственному местоположению в формате <em>JSON </em>с длинными именами полей, я вызову URL <a href="http://easy4web.ru/api/geoip/get.php?p=j&f=f">http://easy4web.ru/api/geoip/get.php?p=j&f=f</a></p>
<p>В следующей статье на эту тему я расскажу о том, как можно применить данный сервис при вызове его из <em>PHP</em>-программы, и из <em>JavaScript </em>на удаленном сервере. Пока сервис <strong>easy.GeoIP </strong>находится в стадии тестирования, возможны некоторые изменения в его работе, о которых я буду предупреждать на сайте.</p>
<!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">1087021</guid>
<pubDate>&#x43F;&#x43D;, 12 &#x43E;&#x43A;&#x442; 2009 15:31:03 MSD</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! AJAX &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; jQuery &#x438; ASP.NET web-&#x441;&#x435;&#x440;&#x432;&#x438;&#x441;&#x43E;&#x432;
</title>
<link>http://archives.maillist.ru/55140/1074849.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;"><h1>AJAX с помощью jQuery и ASP.NET web-сервисов</h1>
<p>Если вы создаете сайты под <strong>ASP.NET</strong>, то возможно вам уже довелось использовать <strong>AJAX-framework</strong>, предоставляемый <em>Microsoft</em>. Тот самый, что использует <strong>ScriptManager</strong></p><p>

Этот метод достаточно прост и удобен, если бы не одно "но" - он весит 132 Кб. И обладает еще одним интересным свойством: если в нашем проекте есть несколько страниц, использующих <strong>AJAX</strong>, то каждая из них будет заново загружать этот скрипт, потому что при загрузке скрипта на странице используется примерно следующий URL <em>http://domainname/ScriptResource.axd?d=TvjJs2RlM8MX3pIUhEsdnZKUzGh-9Wr9nvNBZJbxf-xzq-Wvzbpj6FfMJqZqOPR8Pku52J2zBqleUlYtVE8XCyfyo3kcbSnhbwzYc2LkdfQ1&amp;t=ffffffffee41303f</em>
и для каждой страницы в пределах вашего проекта будет свой <em>ScriptManager</em>, а значит и свой уникальный ID в <em>query-string</em>. А значит скрипт этот для каждой страницы будет браться не из кэша, а запрашиваться заново с сервера.</p><p>

В общем, мне все это не понравилось и я заинтересовался, как можно сэкономить трафик и перейти на AJAX.jQuery. Тем более, что jQuery уже использовался в этом же проекте для других целей. Сказано - сделано! И вот какое решение я нашел.</p><p>

Собственно, модификации пришлось подвергнуть как сами клиентские JavaScript-ы, так и методы, вызываемые на стороне сервера. Связано это с тем, что мне хотелось передавать в качестве параметров для web-сервиса сложные объекты, а не просто строки и целые значения. И получать в ответ хотелось тоже сложные объекты, а не просто строки.</p><p>

Все это можно легко и просто сделать, передавая как в ту так и в другую сторону все же строки, но строки в формате <strong>JSON</strong>, который является родным для <strong>JavaScript</strong>. Да к тому же <strong>ASP.NET</strong> обладает встроенными возможностями сериализации/десериализации <strong>JSON</strong>.</p><p>

Правда, для сериализации объекта в <strong>JSON </strong>на клиентской стороне пришлось использовать еще одну дополнительную библиотеку <strong>json2.js</strong>. Таким образом, обе библиотеки весят около <em>67 Кб</em>. Да плюс ко всему в случае нескольких <strong>ajax</strong>-страниц в проекте, скрипт загрузится всего один раз, и для остальных страниц будет браться из кэша браузера.</p><p>

Но от слов - к делу!</p><p>
Полный текст статьи <a href="http://easy4web.ru/?p=568" target="_blank">"AJAX с помощью jQuery и ASP.NET web-сервисов"</a> с образцами кода и со ссылкой на архив с готовым проектом Вы можете прочитать на сайте <a href="http://easy4web.ru/" target="_blank">"Веб-разработка? Это просто!"</a>
</p>
<!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">1074849</guid>
<pubDate>&#x432;&#x442;, 22 &#x441;&#x435;&#x43D; 2009 11:11:05 MSD</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! XML+XSLT &#x43D;&#x430; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x435; XML-&#x43F;&#x43E;&#x433;&#x43E;&#x434;&#x44B; &#x43E;&#x442; gismeteo.ru
</title>
<link>http://archives.maillist.ru/55140/1048061.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;"><h1>XML+XSLT на примере XML-погоды от gismeteo.ru </h1>
<p>Итак, выполняя свое обещание, публикую статью, посвященную отображению информера погоды gismeteo.ru.
</p><p>
Как вы помните, в прошлый раз в статье <a href="http://easy4web.ru/?p=393">Парсинг XML в JavaScript на примере XML-погоды от gismeteo.ru</a> мы написали длинный (в нескольких местах запутанный и непонятный) скрипт на JavaScript, который радостно преобразовывал XML-Данные от ГИС-метео в HTML-формат, который мы и отображали в нашем браузере.
</p><p>
Этот вариант имел ряд недостатков:
1) При отключенном JavaScript в браузере пользователя мы вообще ничего не увидим.
2) Шаблоны, используемые в этом скрипте были настолько запутанные, что иногда и я сам терялся в том, что значит каждый из тегов этого шаблона.
3) И вообще это не модно и несовременно!
</p><p>
Ведь есть технология лучше: XML+XSLT !
</p><p>
Вот выдержка из wikipedia:
</p>
<blockquote><p><strong>XSLT (Extensible Stylesheet Language Transformations)</strong> &mdash; часть спецификации XSL, задающая язык преобразований XML-документов. Спецификация XSLT является рекомендацией W3C.
</p><p>
При применении таблицы стилей XSLT, состоящей из набора шаблонов, к XML-документу (исходное дерево) образуется конечное дерево, которое может быть другой XML-структурой, HTML-документом или обычным текстом. Правила выбора (и, отчасти, преобразования) данных из исходного дерева пишутся на языке запросов XPath.
</p><p>
XSLT имеет множество различных применений, в основном в области web-программирования и генерации отчётов. Одной из задач, решаемых языком XSLT, является отделение данных от их представления, как часть общей парадигмы MVC (англ. Model-view-controller). Другой стандартной задачей является преобразование XML-документов из одной XML-схемы в другую.</p><p>
В общем, XSLT - это тоже XML особого вида, главной целью которого является преобразование XML-данных из одного вида в другой.</p></blockquote>
<p>
Собственно, эта статья подразумевается именно как практическое введение в <em>XSLT</em>, а поэтому я сразу приведу результирующий <em>XSLT-шаблон</em>, а затем буду его построчно объяснять. Вот он.
</p><p>
<pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;

&lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;xsl:output method="xml" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/&gt;

 &lt;!--Шаблон, преобразующий номер дня недели в его текстовое 
представление--&gt;
 &lt;xsl:template name="get-day-of-the-week-abbreviation"&gt;
 &lt;xsl:param name="day-of-the-week"/&gt;
 &lt;xsl:choose&gt;
 &lt;xsl:when test="$day-of-the-week = 1"&gt;Вс&lt;/xsl:when&gt;
 &lt;xsl:when test="$day-of-the-week = 2"&gt;Пн&lt;/xsl:when&gt;
 &lt;xsl:when test="$day-of-the-week = 3"&gt;Вт&lt;/xsl:when&gt;
 &lt;xsl:when test="$day-of-the-week = 4"&gt;Ср&lt;/xsl:when&gt;
 &lt;xsl:when test="$day-of-the-week = 5"&gt;Чт&lt;/xsl:when&gt;
 &lt;xsl:when test="$day-of-the-week = 6"&gt;Пт&lt;/xsl:when&gt;
 &lt;xsl:when test="$day-of-the-week = 7"&gt;Сб&lt;/xsl:when&gt;
 &lt;xsl:otherwise&gt;?&lt;/xsl:otherwise&gt;
 &lt;/xsl:choose&gt;
 &lt;/xsl:template&gt;
</pre>

Продолжение статьи <a href="http://easy4web.ru/?p=479" target="_blank">XML+XSLT на примере XML-погоды от gismeteo.ru</a> читайте на сайте <a href="http://easy4web.ru" target="_blank">Веб-разработка? Это просто!</a>
<!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">1048061</guid>
<pubDate>&#x447;&#x442;, 06 &#x430;&#x432;&#x433; 2009 18:27:23 MSD</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! &#x41F;&#x430;&#x440;&#x441;&#x438;&#x43D;&#x433; XML &#x432; ActionScript 3.0
</title>
<link>http://archives.maillist.ru/55140/1019773.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;">Возникла у меня однажды задача - создать Flash-контрол, в котором постоянно сверху вниз прокручивается список неких сайтов, причем при наведении мыши на этот контрол прокручивание останавливается, а содержимое пункта списка, на который наведена мышь, разворачивается, и мы теперь можем наблюдать саму ссылку на сайт и краткое описание сайта внизу. Как-то так:<br/>

<a href="http://easy4web.ru/wp-content/uploads/2009/06/scroller.jpg"><img class="alignnone size-thumbnail wp-image-461" title="scroller" src="http://easy4web.ru/wp-content/uploads/2009/06/scroller-150x150.jpg" alt="scroller" width="150" height="150" /></a><br/>

Собственно, хотелось создать универсальный контрол, такой, чтобы и список сайтов и все цвета, и скорость прокрутки, и вообще все изменяемые параметры хранились бы где-то отдельно от самого Flash-контрола, чтобы, когда дизайнеру захочется поменять оформление этого котнрола или его содержимое, он бы меня не дергал лишний раз. Разумное желание. И решил я остановиться на хранении всех этих данных в <em>XML-файле</em>.<br/>

Файл этот имеет вот такой формат:<br/>

<pre class="xml" name="code">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;config&gt;
&lt;control speed="10" indent="24.9"/&gt;
&lt;sites&gt;
&lt;site name="веб-разработка" link="easy4web.ru"
url="http://easy4web.ru/" descr="веб-дизайнер и
веб-программист срывают оковы, освещают темные
места" height="38"/&gt;
&lt;site name="Яндекс" link="yandex.ru" url="http://yandex.ru/" descr="
Поиск от Яндекс. Найдется все!" height="38"/&gt;
&lt;site name="почта от google" link="gmail.com" url="http://gmail.com/"
 descr="Бесплатная почта от google. Попробуй, не пожалеешь."
height="38"/&gt;
&lt;/sites&gt;
&lt;/config&gt;
</pre><br/>
Здесь мы видим один корневой элемент &lt;config&gt; в который вложены: элемент &lt;control&gt; одержащий в себе атрибуты, касающиеся всего контрола в целом, и элемент &lt;sites&gt; содержащий в себе дочерние узлы &lt;site&gt;, каждый из которых описывает отдельный элемент прокручиваемого в контроле списка.<br/>

Осталось теперь разобраться как <em>разобрать </em>этот файл при помощи <em>ActionScript</em>.<br/>

Но для начала структурируем немного в виде классов информацию, хранящуюся в XML-файле.<br/>

Элемент &lt;site&gt; мы опишем следующим классом (файл SiteItem.as):<br/>

<pre class="javascript" name="code">package inc{
public class SiteItem extends Object {
public var pName:String;
public var pLink:String;
public var pURL:String;
public var pDescr:String;
public var pHeight:Number;
public function SiteItem(p_Name:String, p_Link:String, p_URL:String,
p_Descr:String, p_Height:Number){
pName=p_Name;
pLink=p_Link;
pURL=p_URL;
pDescr=p_Descr;
pHeight=p_Height;
}
}
}
</pre><br/>
Как видно, это просто класс с открытыми полями и одним конструктором. Ничего сложного.<br/>

А вот еще один класс, описывающий весь XML-файл (ScrollerParameters.as):<br/>

Полный текст статьи <a href="http://easy4web.ru/?p=458" target="_blank">Парсинг XML в ActionScript 3.0</a> Вы можете прочитать на сайте<a href="http://easy4web.ru/" target="_blank">Веб-разработка? Это просто!</a>
<!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">1019773</guid>
<pubDate>&#x432;&#x441;, 21 &#x438;&#x44E;&#x43D; 2009 15:05:14 MSD</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! &#x425;&#x430;&#x43A;&#x438; &#x434;&#x43B;&#x44F; &#x431;&#x440;&#x430;&#x443;&#x437;&#x435;&#x440;&#x43E;&#x432;
</title>
<link>http://archives.maillist.ru/55140/983731.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;"><h1>Хаки для браузеров</h1>
<p>Сегодня мне хотелось бы поговорить о так называемых &laquo;css-хаках&raquo;. CSS-хаки используют тогда, когда один конкретный браузер надо заставить отображать некий блок разметки не так, как хотелось бы самому браузеру. Сразу оговорюсь, что использовать хаки нужно только тогда, когда это действительно необходимо. Скажем, всеми нами горячо любимый Internet Explorer (седьмой версии) имеет свои, сугубо специфичные представления о работе со списками. И иногда надо только ему объяснить, что он неправ:-)</p><p>
Вообще задача раздельных CSS для разных браузеров имеет несколько путей решения. Один из них &mdash; встроить в &lt;head&gt;&lt;/head&gt; php-, или java-скрипт, определяющий тип браузера, и отсылающий конкретный браузер к предназначенной для него стилевой таблице. Второй &mdash; если проблемы возникают только с IE &mdash; так называемые &laquo;условные комментарии&raquo;. В &lt;head&gt;&lt;/head&gt; задается конструкция вида: </p>
<div class="list">
<pre>
&lt;!&ndash;[if IE]>&lt;link rel=&rdquo;stylesheet&rdquo; href=&rdquo;css/ie.css&rdquo; type=&rdquo;text/css&rdquo; media=&rdquo;screen&rdquo; />&lt;![endif]&ndash;>

или для конкретных версий Explorer'а:
&lt;!&ndash;[if IE7]>&lt;link rel=&rdquo;stylesheet&rdquo; href=&rdquo;css/ie7.css&rdquo; type=&rdquo;text/css&rdquo; media=&rdquo;screen&rdquo; />&lt;![endif]&ndash;>
&lt;!&ndash;[if IE6]>&lt;link rel=&rdquo;stylesheet&rdquo; href=&rdquo;css/ie6.css&rdquo; type=&rdquo;text/css&rdquo; media=&rdquo;screen&rdquo; />&lt;![endif]&ndash;>
</pre>
</div>

<p>И, наконец, третий путь &mdash; CSS-хаки.</p>

<p>Самый удобный в плане хаков браузер - Firefox (и относящиеся к его семейству), так как имеет свою группу css-классов, начинающуюся с перфикса @-moz-
Например:</p>
<div class="list">
<pre>
 -moz-document url-prefix() {
  .style {background: #F00;}
}

css-rule, x:-moz-any-link{

}
</pre>
</div>

<p>Для Opera:</p>
<div class="list">
<pre>
 media all and (-webkit-min-device-pixel-ratio:10000),
not all and (-webkit-min-device-pixel-ratio:0) {
 .style {background: #F00;} /* только для Opera */
}

html:first-child {} /* только для Opera */
html:first-child .style {
background: #F00; /* только для Opera < 9.5 */
}

Также, можно создать специальный файл стилей для Opera и подключить его следующим образом:
&lt;head>
&lt;link rel=&rdquo;stylesheet&rdquo; href=&rdquo;css/opera.css&rdquo; type=&rdquo;opera/css&rdquo; media=&rdquo;screen&rdquo; />
&lt/head>
</pre>
</div>

<p>Google Chrome и Safari по способу работы с блочной моделью напоминают Opera и с высокой долей вероятности можно предполагать, что если ваша верстка нормально выглядит в Опере, то и в Хроме с Сафари с нею тоже все будет нормально. Однако, на всякий случай, хаки:</p>

<div class="list">
<pre>
body:last-child:not(:root:root) .style {
  background: #F00;
}
</pre>
</div>

<p>Ну, и наконец, хак для IE. Почему только один? По опыту решения конкретных задач могу сказать, что все проблемы верстки, с которыми мне приходилось сталкиваться, были одинаковыми у наиболее распространенных версий IE (6,7). Поэтому я пользовался (если пользовался) универсальным хаком, так называемым &laquo;holy hack&raquo;:</p>
<div class="list">
<pre>
html {
  background: #f00; (это понимают все браузеры)
  * background: #0f0; (а это только ослики)
}
</pre>
</div>

<p>Напоследок напомню, что практически все хаки влияют на валидность полученного кода, поэтому, если есть возможность - надо обходиться без них. А такая возможность есть почти всегда, и исключение составляет только горячо любимый всеми нами Internet Explorer:-)</p>
<p>Статью <a href='http://easy4web.ru/?p=451' target='_blank'>Хаки для браузеров</a> а также другие статьи, посвященные веб-разработке вы сможете на сайте <a href='http://easy4web.ru' target='_blank'>Веб-разработка? Это просто!</a></p>
<!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">983731</guid>
<pubDate>&#x432;&#x442;, 21 &#x430;&#x43F;&#x440; 2009 09:52:44 MSD</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! &#x41F;&#x430;&#x440;&#x441;&#x438;&#x43D;&#x433; XML &#x432; JavaScript &#x43D;&#x430; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x435; XML-&#x43F;&#x43E;&#x433;&#x43E;&#x434;&#x44B; &#x43E;&#x442; gismeteo
</title>
<link>http://archives.maillist.ru/55140/965348.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;"><h1>Парсинг XML в JavaScript на примере XML-погоды от gismeteo.ru</h1>
<p>Итак, заинтересовала меня тема, <em>как распарсить XML-файл посредством JavaScript</em>. Немного порыскав в поисковиках наткнулся на весьма познавательную статью по этой теме <a href="http://www.webcorp.ru/page/xml_ie.html" target="_blank">XML в Microsoft Internet Explorer 5.0</a>. Есть у этой статьи маленький недостаток - она посвящена только IE, а мы в нашем блоге твердо решили писать только кроссбраузерный код. Однако, для начала хватило и этой статьи, сначала весь код был написан для IE, и затем была
осуществлена безуспешная попытка запустить его также в Opera, Mozilla, Chrome. Но как я уже говорил "не боги горшки обжигают", все некроссбраузерные баги были успешно найдены и исправлены. Это р-раз.
</p><p>
В качестве подопытного кролика был взят XML-файл, содержащий в себе данные о погоде на ближайшие сутки от <a href="http://informer.gismeteo.ru/xml.html" target="_blank">Gismeteo.ru</a>. Собственно, открыв эту страницу, и выбрав интересующий вас город, вы можете ниже на той же странице наблюдать содержимое этого XML-файла, и описание его структуры. Это д-два.
</p><p>
Сопоставив первые два пункта уже можно сваять свой собственный парсер XML-документов на JavaScript, однако если вам лень, то читайте статью дальше. В ней я расскажу о том, как провести анализ содержимого XML-файла и отобразить его в том виде, в котором вам хочется. Это т-три.
</p><p>
А вот сразу <a href="http://easy4web.ru/samples/gismeteo/" target="_blank">ссылка на результаты работы</a> моего скрипта. Не расстраивайтесь, что выглядит все так просто, скриптик позволяет посредством шаблонов задать собственный вид отображения результатов, и об этой возможности я расскажу ниже.
</p><p>
Сразу хочу предупредить, что ниже пойдет теоретическая и практическая часть работы с XML-файлами, и если вам не хочется вникать во все эти подробности, то вы можете сразу перейти в самый конец статьи и по предложенной там ссылке скачать готовый скрипт обработки XML-документа, содержащего прогноз погоды от gismeteo.ru. А теперь теория...
</p><p>
Итак, что же такое XML? <a href="http://ru.wikipedia.org/wiki/Xml" target="_blank">Wikipedia</a> утверждает, что:</p>
<blockquote><p><strong>XML</strong> (<em>eXtensible Markup Language</em> &mdash; расширяемый язык разметки) &mdash; рекомендованный консорциумом <em>W3C</em> язык разметки, представляющий собой свод общих синтаксических правил. <em>XML</em> &mdash; текстовый формат, предназначенный для хранения структурированных данных, для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки. Целью создания XML было обеспечение совместимости при передаче структурированных
данных между разными системами обработки информации, особенно при передаче таких данных через Интернет.
</p><p>
Визуально структура XML может быть представлена как дерево. Важнейшее обязательное требование состоит в том, что документ должен иметь только один корневой элемент (в нашем случае это элемент MMWEATHER). Это значит, что данные всего документа должны быть расположены между единственным начальным корневым тегом и соответствующим ему конечным тегом.
</p><p>
Остальная часть XML-документа состоит из вложенных элементов, которые могут иметь атрибуты и содержимое. Элемент обычно состоит из пары тегов (открывающего и закрывающего), обрамляющих другие элементы. Открывающий тег состоит из имени элемента в угловых скобках, например, &lt;FORECAST&gt; ; закрывающий тег состоит из того же имени в угловых скобках, но перед именем ещё добавляется косая черта, например, &lt;/FORECAST&gt;. Содержимым элемента называется всё, что расположено между открывающим и закрывающим тегами,
включая текст и другие вложенные элементы.
</p><p>
Кроме содержания у элемента могут быть атрибуты &mdash; пары имя-значение, добавляемые в открывающий тег после названия элемента. Например в случае &lt;PHENOMENA cloudiness="2" precipitation="10" rpower="0" spower="0"/&gt;
элемент PHENOMENA имеет 4 атрибута cloudiness, precipitation, rpower и spower имеющие соответственно значения 2, 10, 0, 0.</p></blockquote>
<p>
Итак, со структурой XML-файла более-менее разобрались. Осталось только понять, каким образом все это богатство обрабатывать в JavaScript. Собственно, в статье <a href="http://www.webcorp.ru/page/xml_ie.html" target="_blank">XML в Microsoft Internet Explorer 5.0</a> можно обо всем этом прочесть, но я намерен вкратце обрисовать ниже основные приемы анализа XML-файлов в контексте поставленной в начале статьи задачи - разбора XML-документа, содержащего прогноз погоды на сутки от gismeteo.</p>
<p>Продолжение статьи читайте на сайте <a href='http://easy4web.ru/?p=393'>Веб-разарботка? Это просто!</a></p>
<!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">965348</guid>
<pubDate>&#x43F;&#x442;, 20 &#x43C;&#x430;&#x440; 2009 15:12:14 MSK</pubDate>
</item>
<item>
<title>&#x412;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;? &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;! &#x41E;&#x431;&#x43B;&#x435;&#x433;&#x447;&#x430;&#x44F; &#x441;&#x435;&#x431;&#x435; &#x432;&#x435;&#x440;&#x441;&#x442;&#x43A;&#x443;.
</title>
<link>http://archives.maillist.ru/55140/963314.html?rss=1</link>
<description><![CDATA[<style type="text/css"><!-- p { 
     padding-left: 10px; 
     padding-right: 10px; 
     font: 14px/20px Veradana, Arial, sans-serif; 
} 
 
span.drop { 
     font: bold 60px /0.83em tahoma, sans-serif; 
     color: #0019ff; 
     float: left; 
     margin-right: 5px; 
     margin-top: 5px; 
} 
 
 .list { 
     background-color: #f5f5f5; 
     border: 1px solid #ededed; 
     padding: 10px; 
     margin: 10px 40px 10px 40px; 
     font-family: courier, monospace; 
} 
 
h1{ 
     font-family: Verdana, Arial, Sans-Serif; 
     color:#fcb300; 
     font-size:28px; 
     font-weight:bold; 
     padding: 10px 0 0 10px; 
     text-align:left; 
} 
 --></style>
<table summary="" cellspacing="5" cellpadding="5" border="0" bgcolor="#ffffff" style="background-color: #ffffff; background-image: ;">
<tr valign="top" align="left">
<td bgcolor="#ffffff" style="padding: 5px; background-color: #ffffff; background-image: ; border: solid 1px #dddddd;"><h1>Облегчая себе верстку.</h1>
<p>Всем нам давно известно, что каждый браузер имеет свои дефолтные значения CSS для многих объектов, таких как, скажем, список, параграф, границы и тому подобное (подробнее, например, <a href="http://zodios.net/examples/cssdefault/cssdefault.htm">тут</a>). Для того, чтобы верстать действительно кроссбраузерно нам необходимо сбросить стандартные значения на некий общий знаменатель, а потом прописать все заново.</p><p>

Некий сознательный гражданин Эрик Майер предложил следующую версию стилей для обнуления всех значений:</p><p>
<a href='http://easy4web.ru/?p=420' target='_blank'>Смотреть на сайте easy4web.ru</a>
</p><p>В принципе, само по себе это правило достаточно хорошо за парой исключений. А именно - спорным является убирание рамки для псевдокласса :focus (это который рисует рамку вокруг нажатых ссылок), так как такими ссылками нельзя будет управлять с клавиатуры, нельзя будет понять, что они в данный момент в фокусе. Также спорным выглядит использование парных кавычек "", так как в русской типографике используются обычно кавычки елочки &laquo;&raquo;, вызываемые кодами &#38#171; и &#38#187;
</p><p>
Правильное обнуление значений зачастую позволяет избежать использования CSS-хаков, о которых мы поговорим в следующий раз.
</p>
<!-- " ' --></td>
</tr>
</table>]]></description>
<guid isPermaLink="false">963314</guid>
<pubDate>&#x432;&#x442;, 17 &#x43C;&#x430;&#x440; 2009 12:16:05 MSK</pubDate>
</item>
</channel>
</rss>