отложить загрузку JS-библиотек и нескольких функций, готовых для документов - PullRequest
0 голосов
/ 25 ноября 2011

Мне удалось отложить загрузку библиотек JS, а также одну функцию готовности документа, после этого поста Можно отложить загрузку jQuery?

Однако у меня есть несколько функций готовности документов, которыеразмещены на странице различными модулями (и не на каждой странице).код, который у меня есть до сих пор:

echo'
//      deferred loading of jQuery library and
(function() {
 function getScript(url,success){
   var script=document.createElement("script");
   script.src=url;
   var head=document.getElementsByTagName("head")[0],
       done=false;
   script.onload=script.onreadystatechange = function(){
     if ( !done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") ) 
     {
       done=true;
       success();
       script.onload = script.onreadystatechange = null;
       head.removeChild(script);
     }
   };
   head.appendChild(script);
 }
 getScript("lib/jquery/js/jquery-1.4.4.min.js",function(){
   getScript("lib/jquery/js/jquery.tools.min.js",function(){
     $("ul.tabs").tabs("div.panes > .pane",  {
 ';
 if(!isset($params['onclickfunction']) == 'no') {
 echo '
              onClick: function() {

                   var myTab = this.getCurrentTab().text();
                   document.getElementById("titleReplacement").innerHTML = " - " + myTab;
              },
  '; } //end conditional click function

echo '
              effect:"fade",
              fadeInSpeed:800,
              initialIndex:';

if(isset($_GET['tabs'])) { $this_url = $_GET['tabs']; }
else { $this_url = 'some text'; }

if($this_url == $params['tab1']) { echo '0'; }
elseif ($this_url == $params['tab2']) { echo '1'; }
elseif ($this_url == $params['tab3']) { echo '2'; }
//nothing matches? show first tab
else { echo '0'; }

echo  ' })  ;

   });
  })   // possibly another ; here ???
 })();
';

Я думаю, что это на самом деле работает, но другие функции, готовые к работе с документами, пытаются запустить до загрузки библиотек.Есть ли простой тест, который я мог бы использовать для других функций, так как я не могу объединить их в одну функцию.

cheers

Ответы [ 2 ]

0 голосов
/ 27 ноября 2011

Взгляните на LABjs Кайла Симпсона.Я думаю, что это будет делать то, что вы хотите ...

0 голосов
/ 25 ноября 2011

Вы можете выполнить базовую проверку, чтобы определить, является ли jQuery определенной функцией, например так:

if( jQuery !== undefined ){
    //Execute your jQuery code here
}

Однако приведенное выше будет выполнено один раз, и если jQuery не определен, то он не будет работать снова.Оберните ваш код document.ready в функцию, которую вы выполняете при успешной загрузке библиотеки jQuery, так же, как вы делаете это при создании вкладок.

Вы также можете попробовать загрузить библиотеку jQuery изCDN.Вы получите преимущества быстрого сервера и кэширования, которые могут позволить загрузить библиотеку в заголовок без существенного снижения производительности.

...