<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Code-Is-Art &#187; Flash</title>
	<atom:link href="http://www.codeisart.ru/rubric/flash/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codeisart.ru</link>
	<description>Статьи по SEO, дизайну и программированию. Переводы на веб-тематику. Исследования и наработки в области интернет-технологий.</description>
	<lastBuildDate>Thu, 17 Dec 2009 12:00:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Вставка Flash-анимации</title>
		<link>http://www.codeisart.ru/flash-insert/</link>
		<comments>http://www.codeisart.ru/flash-insert/#comments</comments>
		<pubDate>Sun, 05 Oct 2008 22:02:28 +0000</pubDate>
		<dc:creator>Octane</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=662</guid>
		<description><![CDATA[Поговорим о&#160;том, как&#160;кросс-браузерно разместить на&#160;страницах сайта Flash-анимацию и&#160;сохранить валидность XHTML-документа.
Мы&#160;знаем, что&#160;тег &#60;embed&#62;, который так&#160;часто используется для&#160;внедрения swf-файлов в&#160;HTML-страницы отсутствует в&#160;популярной на&#160;данный момент спецификации &#171;XHTML&#160;1.0&#160;Strict&#187;, что&#160;вызывает ошибки во&#160;время прохождения тестов W3C на&#160;соответствие стандартам при&#160;использовании этого&#160;тега.

Современные браузеры поддерживают универсальный контейнер &#60;object&#62;, с&#160;помощью которого можно легко вставить Flash-файл на сайт, указав атрибуты &#171;data&#187; (ссылку на&#160;файл) и&#160;&#171;type&#187; (тип контента), [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/10/flash-insert.png" alt="Flash insert" width="228" height="168" class="left" />Поговорим о&nbsp;том, как&nbsp;кросс-браузерно разместить на&nbsp;страницах сайта Flash-анимацию и&nbsp;сохранить валидность XHTML-документа.</p>
<p>Мы&nbsp;знаем, что&nbsp;тег <code>&lt;embed&gt;</code>, который так&nbsp;часто используется для&nbsp;внедрения swf-файлов в&nbsp;HTML-страницы отсутствует в&nbsp;популярной на&nbsp;данный момент спецификации &laquo;XHTML&nbsp;1.0&nbsp;Strict&raquo;, что&nbsp;вызывает ошибки во&nbsp;время прохождения тестов W3C на&nbsp;соответствие стандартам при&nbsp;использовании этого&nbsp;тега.</p>
<p><span id="more-662"></span></p>
<p>Современные браузеры поддерживают универсальный контейнер <code>&lt;object&gt;</code>, с&nbsp;помощью которого можно легко вставить Flash-файл на сайт, указав атрибуты &laquo;<code>data</code>&raquo; (ссылку на&nbsp;файл) и&nbsp;&laquo;<code>type</code>&raquo; (тип контента), но &laquo;Internet&nbsp;Explorer&raquo; работает с&nbsp;<code>&lt;object&gt;</code> по&nbsp;своему, он&nbsp;не&nbsp;воспринимает ссылку на&nbsp;swf-файл, указанную в&nbsp;атрибуте &laquo;<code>data</code>&raquo;, а&nbsp;требует добавления дочернего тега <code>&lt;param&gt;</code> c&nbsp;атрибутами <code>name=&quot;movie&quot;</code> и <code>value=&quot;ссылка-на-swf-файл&quot;</code>. На&nbsp;этом проблемы не&nbsp;заканчиваются. Для&nbsp;&laquo;Internet&nbsp;Explorer&raquo; в&nbsp;теге <code>&lt;object&gt;</code> необходимо указать &laquo;<code>classid</code>&raquo; ActiveX-элемента, но &laquo;FireFox&raquo; почему-то блокирует такой&nbsp;контейнер.</p>
<p>Получается, что&nbsp;для&nbsp;&laquo;FireFox&raquo; и&nbsp;&laquo;Internet&nbsp;Explorer&raquo; нужно&nbsp;выдать совершенно разный XHTML-код. Что&nbsp;же&nbsp;делать? Очевидный вариант&nbsp;&mdash; использовать возможности JavaScript для&nbsp;динамического создания нужных&nbsp;узлов. Существует готовое решение &laquo;<a href="http://code.google.com/p/swfobject/" rel="external nofollow">SWFObject</a>&raquo;&nbsp;&mdash; это&nbsp;огромный скрипт, позволяющий внедрять &laquo;Flash&raquo; в&nbsp;веб-страницы, но&nbsp;его&nbsp;размер мне&nbsp;кажется не&nbsp;приемлимым. Версия <var>2.1</var>&nbsp;занимает <var>9,5кб</var>&nbsp;в&nbsp;минифицированном виде, мне&nbsp;кажется, что&nbsp;для&nbsp;решения столь узкоспециализированной задачи это&nbsp;слишком много. Хотя конечно &laquo;SWFObject&raquo; предоставляет богатый функционал для внедрения &laquo;Flash&raquo;.</p>
<p>Немного поэкспериментировав, я&nbsp;нашел 2&nbsp;самых&nbsp;простых варианта XHTML-кода:</p>
<p><b>Для&nbsp;Internet Explorer:</b></p>
<pre><code class="html">&lt;OBJECT classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; width=&quot;&quot; height=&quot;&quot;&gt;
&lt;PARAM name=&quot;movie&quot; value=&quot;url&quot; /&gt;
&lt;/OBJECT&gt;</code></pre>
<p><b>Для&nbsp;остальных браузеров:</b></p>
<pre><code class="html">&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;url&quot; width=&quot;&quot; height=&quot;&quot;&gt;&lt;/object&gt;</code></pre>
<p>Этого кода достаточно, чтобы мы&nbsp;увидели работающую Flash&#8217;ку на&nbsp;сайте. Теперь напишем скрипт, который будет динамически генерировать данные DOM-узлы с&nbsp;необходимыми атрибутами, в&nbsp;зависимости от&nbsp;используемого браузера. А&nbsp;так&nbsp;же&nbsp;добавим возможность указать свои&nbsp;параметры, такие&nbsp;как&nbsp;&laquo;<code>flashvars</code>&raquo;, &laquo;<code>quality</code>&raquo;, &laquo;<code>wmode</code>&raquo;&nbsp;и&nbsp;другие.</p>
<pre><code class="javascript">function insertFlash(node, url, width, height, params) {
  var object, param, key;
  function newParam(name, value) {
    if(0 /*@cc_on + 1 @*/) return ['&lt;PARAM name=&quot;', name, '&quot; value=&quot;', value, '&quot; /&gt;'].join('');
    else {
      param = document.createElement('param');
      param.name = name;
      param.value = value;
      return param;
    }
  }
  if(0 /*@cc_on + 1 @*/) {
    object = ['&lt;OBJECT classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; width=&quot;', width, '&quot; height=&quot;', height, '&quot;&gt;&lt;PARAM name=&quot;movie&quot; value=&quot;', url, '&quot; /&gt;'];
    if(params) for(key in params) if(params.hasOwnProperty(key)) object.push(newParam(key, params[key]));
    object.push('&lt;/OBJECT&gt;');
    node.innerHTML = object.join('');
  }
  else {
    object = document.createElement('object');
    object.type = 'application/x-shockwave-flash';
    object.data = url;
    object.width = width;
    object.height = height;
    if(params) for(key in params) if(params.hasOwnProperty(key)) object.appendChild(newParam(key, params[key]));
    while(node.firstChild) node.removeChild(node.firstChild);
    node.appendChild(object);
  }
}</code></pre>
<p>Теперь&nbsp;в&nbsp;любое время, после&nbsp;того, как&nbsp;будет готов DOM, можно вставить &laquo;Flash&raquo; на&nbsp;страницу в&nbsp;указанный контейнер, при&nbsp;помощи функции &laquo;<code>insertFlash</code>&raquo;.</p>
<pre><code class="javascript">// Пример
window.onload = function() {
  var logo = document.getElementById('logotype');
  var url = '../flash/logo.swf';
  var width = 320;
  var height = 240;
  var parametrs = {
    wmode: 'transparent',
    quality: 'high'
  };
  insertFlash(logo, url, width, height, parametrs);
};</code></pre>
<p>Тестировал в&nbsp;FireFox&nbsp;2.0.0.13/3.0.3, Opera&nbsp;9.27/9.52/9.60b, Safari&nbsp;3.1&nbsp;(win), Google&nbsp;Chrome&nbsp;0.2 и Internet&nbsp;Explorer&nbsp;5.5/6/8b2.</p>
<p>При&nbsp;желании можно добавить проверку версии установленного у&nbsp;пользователя Flash-плеера и&nbsp;в&nbsp;случае не&nbsp;соответствия требуемой, выводить сообщение с&nbsp;просьбой об&nbsp;обновлении. Так&nbsp;же&nbsp;при&nbsp;помощи callback-вызова от&nbsp;swf-файла можно определить доступность Flash на&nbsp;компьютере клиента. Но&nbsp;в&nbsp;большинстве случаев это&nbsp;всё&nbsp;не&nbsp;нужно.
<p>В&nbsp;дополнение приведу пример добавления своих&nbsp;методов для&nbsp;работы с&nbsp;DOM-узлами в&nbsp;моем <a href="http://www.codeisart.ru/js-core-javascript-framework/">JavaScript&nbsp;framework&#8217;е&nbsp;&laquo;js-core&raquo;</a>. Добавим метод &laquo;<code>flash</code>&raquo;, который выполняет аналогичные вышеприведенному скрипту действия, но&nbsp;написан с&nbsp;использованием функций framework&#8217;а.</p>
<pre><code class="javascript">_$.prototype.extend({
  flash: function(url, width, height, param) {
    if(core.ie) {
      var obj = ['&lt;OBJECT classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; width=&quot;', width, '&quot; height=&quot;', height, '&quot;&gt;&lt;PARAM name=&quot;movie&quot; value=&quot;', url, '&quot; /&gt;'];
      if(param) $.foreach(param, function(name, value) { obj = obj.concat(['&lt;PARAM name=&quot;', name, '&quot; value=&quot;', value, '&quot; /&gt;']); });
      obj.push('&lt;/OBJECT&gt;');
      this.html(obj.join(''));
    }
    else ({}).extend(param).each(function(obj) { obj.append('param').attr({name: this, value: param[this]}); }, [this.empty().empty().append('object').attr({type: 'application/x-shockwave-flash', data: url, width: width, height: height})]);
    return this;
  }
});</code></pre>
<p>Используем&nbsp;так:</p>
<pre><code class="javascript">$('logotype').flash('../flash/logo.swf', 320, 240, {wmode: 'transparent'});</code></pre>
<p>Надеюсь теперь у&nbsp;Вас&nbsp;не&nbsp;возникнет проблем с&nbsp;внедрением &laquo;Flash&raquo; в&nbsp;свои веб-проекты.</p>
<p class="bold">Полезно почитать</p>
<p>В&nbsp;начале статьи говорилось о&nbsp;&laquo;SWFObject&raquo;, как&nbsp;его&nbsp;использовать можно прочесть на&nbsp;русском языке в&nbsp;статье &laquo;<a href="http://designformasters.info/posts/flash-embed-with-swfobject-2/">Внедрение Flash с&nbsp;помощью SWFObject</a>&raquo;. О&nbsp;том, что&nbsp;можно ставить активные ссылки не&nbsp;только для&nbsp;e-mail, читаем в&nbsp;заметке &laquo;<a href="http://rotorweb.ru/xhtmlcss-verstka/ssylki-na-skype-i-icq.html">Ссылки на&nbsp;Skype и&nbsp;ICQ</a>&raquo;. Примите участие в&nbsp;обсуждении вопроса: &laquo;<a href="http://www.mannodesign.com/nuzhna-li-bolshaya-ryzhaya-knopka-rss-na-sajte">Нужна&nbsp;ли Большая Рыжая Кнопка RSS на&nbsp;сайте?</a>&raquo;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/flash-insert/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>
