<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Deerua about Coding: последние заметки с тегом &amp;laquo;setTimeout&amp;raquo;</title><link>http://deer.org.ua/keywords/settimeout/</link><description></description><language>ru</language><generator>e2 (http://blogengine.ru/)</generator><item><title>Dynamic load JavaScript ("OnDemand")</title><guid isPermaLink="true">http://deer.org.ua/2008/10/08/1/</guid><link>http://deer.org.ua/2008/10/08/1/</link><comments>http://deer.org.ua/2008/10/08/1/comments/</comments><description>Для загрузки джаваскриптов динамически ("по требованию"), можно использовать простую функцию: &lt;pre&gt;&lt;span class="hl-reserved"&gt;function&lt;/span&gt;&lt;span class="hl-default"&gt; $&lt;/span&gt;&lt;span class="hl-reserved"&gt;import&lt;/span&gt;&lt;span class="hl-brackets"&gt;(&lt;/span&gt;&lt;span class="hl-identifier"&gt;src&lt;/span&gt;&lt;span class="hl-brackets"&gt;){
  &lt;/span&gt;&lt;span class="hl-reserved"&gt;var &lt;/span&gt;&lt;span class="hl-identifier"&gt;scriptElem&lt;/span&gt;&lt;span class="hl-code"&gt; = &lt;/span&gt;&lt;span class="hl-builtin"&gt;document&lt;/span&gt;&lt;span class="hl-code"&gt;.&lt;/span&gt;&lt;span class="hl-identifier"&gt;createElement&lt;/span&gt;&lt;span class="hl-brackets"&gt;(&lt;/span&gt;&lt;span class="hl-quotes"&gt;'&lt;/span&gt;&lt;span class="hl-string"&gt;script&lt;/span&gt;&lt;span class="hl-quotes"&gt;'&lt;/span&gt;&lt;span class="hl-brackets"&gt;)&lt;/span&gt;&lt;span class="hl-code"&gt;;
  &lt;/span&gt;&lt;span class="hl-identifier"&gt;scriptElem&lt;/span&gt;&lt;span class="hl-code"&gt;.&lt;/span&gt;&lt;span class="hl-identifier"&gt;setAttribute&lt;/span&gt;&lt;span class="hl-brackets"&gt;(&lt;/span&gt;&lt;span class="hl-quotes"&gt;'&lt;/span&gt;&lt;span class="hl-string"&gt;src&lt;/span&gt;&lt;span class="hl-quotes"&gt;'&lt;/span&gt;&lt;span class="hl-code"&gt;,&lt;/span&gt;&lt;span class="hl-identifier"&gt;src&lt;/span&gt;&lt;span class="hl-brackets"&gt;)&lt;/span&gt;&lt;span class="hl-code"&gt;;
  &lt;/span&gt;&lt;span class="hl-identifier"&gt;scriptElem&lt;/span&gt;&lt;span class="hl-code"&gt;.&lt;/span&gt;&lt;span class="hl-identifier"&gt;setAttribute&lt;/span&gt;&lt;span class="hl-brackets"&gt;(&lt;/span&gt;&lt;span class="hl-quotes"&gt;'&lt;/span&gt;&lt;span class="hl-string"&gt;type&lt;/span&gt;&lt;span class="hl-quotes"&gt;'&lt;/span&gt;&lt;span class="hl-code"&gt;,&lt;/span&gt;&lt;span class="hl-quotes"&gt;'&lt;/span&gt;&lt;span class="hl-string"&gt;text/javascript&lt;/span&gt;&lt;span class="hl-quotes"&gt;'&lt;/span&gt;&lt;span class="hl-brackets"&gt;)&lt;/span&gt;&lt;span class="hl-code"&gt;;
  &lt;/span&gt;&lt;span class="hl-builtin"&gt;document&lt;/span&gt;&lt;span class="hl-code"&gt;.&lt;/span&gt;&lt;span class="hl-identifier"&gt;getElementsByTagName&lt;/span&gt;&lt;span class="hl-brackets"&gt;(&lt;/span&gt;&lt;span class="hl-quotes"&gt;'&lt;/span&gt;&lt;span class="hl-string"&gt;head&lt;/span&gt;&lt;span class="hl-quotes"&gt;'&lt;/span&gt;&lt;span class="hl-brackets"&gt;)[&lt;/span&gt;&lt;span class="hl-number"&gt;0&lt;/span&gt;&lt;span class="hl-brackets"&gt;]&lt;/span&gt;&lt;span class="hl-code"&gt;.&lt;/span&gt;&lt;span class="hl-identifier"&gt;appendChild&lt;/span&gt;&lt;span class="hl-brackets"&gt;(&lt;/span&gt;&lt;span class="hl-identifier"&gt;scriptElem&lt;/span&gt;&lt;span class="hl-brackets"&gt;)&lt;/span&gt;&lt;span class="hl-code"&gt;;&lt;/span&gt;
&lt;span class="hl-brackets"&gt;}&lt;/span&gt;&lt;/pre&gt;Если загружаемый Джаваскрипт часто изменяется, что бы избавиться от кеширования, можно использовать функцию ниже: &lt;pre&gt;&lt;span class="hl-reserved"&gt;function&lt;/span&gt;&lt;span class="hl-default"&gt; $&lt;/span&gt;&lt;span class="hl-identifier"&gt;importNoCache&lt;/span&gt;&lt;span class="hl-brackets"&gt;(&lt;/span&gt;&lt;span class="hl-identifier"&gt;src&lt;/span&gt;&lt;span class="hl-brackets"&gt;){
  &lt;/span&gt;&lt;span class="hl-reserved"&gt;var &lt;/span&gt;&lt;span class="hl-identifier"&gt;ms&lt;/span&gt;&lt;span class="hl-code"&gt; = &lt;/span&gt;&lt;span class="hl-reserved"&gt;new &lt;/span&gt;&lt;span class="hl-builtin"&gt;Date&lt;/span&gt;&lt;span class="hl-brackets"&gt;()&lt;/span&gt;&lt;span class="hl-code"&gt;.&lt;/span&gt;&lt;span class="hl-identifier"&gt;getTime&lt;/span&gt;&lt;span class="hl-brackets"&gt;()&lt;/span&gt;&lt;span class="hl-code"&gt;.&lt;/span&gt;&lt;span class="hl-identifier"&gt;toString&lt;/span&gt;&lt;span class="hl-brackets"&gt;()&lt;/span&gt;&lt;span class="hl-code"&gt;;
  &lt;/span&gt;&lt;span class="hl-reserved"&gt;var &lt;/span&gt;&lt;span class="hl-identifier"&gt;seed&lt;/span&gt;&lt;span class="hl-code"&gt; = &lt;/span&gt;&lt;span class="hl-quotes"&gt;"&lt;/span&gt;&lt;span class="hl-string"&gt;?&lt;/span&gt;&lt;span class="hl-quotes"&gt;"&lt;/span&gt;&lt;span class="hl-code"&gt; + &lt;/span&gt;&lt;span class="hl-identifier"&gt;ms&lt;/span&gt;&lt;span class="hl-code"&gt;; 
  $&lt;/span&gt;&lt;span class="hl-reserved"&gt;import&lt;/span&gt;&lt;span class="hl-brackets"&gt;(&lt;/span&gt;&lt;span class="hl-identifier"&gt;src&lt;/span&gt;&lt;span class="hl-code"&gt; + &lt;/span&gt;&lt;span class="hl-identifier"&gt;seed&lt;/span&gt;&lt;span class="hl-brackets"&gt;)&lt;/span&gt;&lt;span class="hl-code"&gt;;
&lt;/span&gt;&lt;span class="hl-brackets"&gt;}&lt;/span&gt;&lt;/pre&gt; Пример использования: &lt;pre&gt;$&lt;span class="hl-reserved"&gt;import&lt;/span&gt;&lt;span class="hl-brackets"&gt;(&lt;/span&gt;&lt;span class="hl-quotes"&gt;"&lt;/span&gt;&lt;span class="hl-string"&gt;/js/somescript.js&lt;/span&gt;&lt;span class="hl-quotes"&gt;"&lt;/span&gt;&lt;span class="hl-brackets"&gt;)&lt;/span&gt;&lt;span class="hl-default"&gt;; или $&lt;/span&gt;&lt;span class="hl-identifier"&gt;importNoCache&lt;/span&gt;&lt;span class="hl-brackets"&gt;(&lt;/span&gt;&lt;span class="hl-quotes"&gt;"&lt;/span&gt;&lt;span class="hl-string"&gt;/js/somescript.js&lt;/span&gt;&lt;span class="hl-quotes"&gt;"&lt;/span&gt;&lt;span class="hl-brackets"&gt;)&lt;/span&gt;&lt;span class="hl-default"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Для корректной работы с фреймворками, или обьёмными функциями их лучше подгружать по таймауту(после подгрузки самих фреймфорков/функций)  &lt;pre&gt;&lt;span class="hl-identifier"&gt;setTimeout&lt;/span&gt;&lt;span class="hl-brackets"&gt;(&lt;/span&gt;&lt;span class="hl-quotes"&gt;"&lt;/span&gt;&lt;span class="hl-string"&gt;SomeFreamework.SomeFucntionMake('someparametr')&lt;/span&gt;&lt;span class="hl-quotes"&gt;"&lt;/span&gt;&lt;span class="hl-code"&gt;, &lt;/span&gt;&lt;span class="hl-number"&gt;100&lt;/span&gt;&lt;span class="hl-brackets"&gt;)&lt;/span&gt;&lt;span class="hl-default"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;hr /&gt;&lt;a href="http://deer.org.ua/2008/10/08/1/comments/"&gt;Комментарии&lt;/a&gt; к заметке&lt;br /&gt;&lt;br /&gt;Теги:&lt;br /&gt;&lt;a href="http://deer.org.ua/tags/javascript/"&gt;javascript&lt;/a&gt; &amp;gt; &lt;a href="http://deer.org.ua/tags/javascript/import/"&gt;import&lt;/a&gt; &amp;gt; &lt;a href="http://deer.org.ua/tags/javascript/import/ondemand/"&gt;ondemand&lt;/a&gt;&lt;br /&gt;&lt;a href="http://deer.org.ua/tags/javascript/"&gt;javascript&lt;/a&gt; &amp;gt; &lt;a href="http://deer.org.ua/tags/javascript/import/"&gt;import&lt;/a&gt;&lt;br /&gt;&lt;a href="http://deer.org.ua/tags/javascript/"&gt;javascript&lt;/a&gt; &amp;gt; &lt;a href="http://deer.org.ua/tags/javascript/function/"&gt;function&lt;/a&gt; &amp;gt; &lt;a href="http://deer.org.ua/tags/javascript/function/settimeout/"&gt;setTimeout&lt;/a&gt;</description><pubDate>Wed, 08 Oct 2008 12:49:11 +0200</pubDate></item></channel></rss>