0

在这篇文章之后,我设法推迟了 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 ???
 })();
';

我认为这实际上可行,但其他文档就绪功能正在尝试在加载库之前运行。是否有一个简单的测试可以用于其他功能,因为我无法将它们合并到一个功能中。

干杯

4

2 回答 2

0

你可以做一个基本的检查,看看 jQuery 是否是一个像这样定义的函数:

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

但是,上面会运行一次,如果没有定义 jQuery,它就不会再次运行。将代码包装document.ready在成功加载 jQuery 库时执行的函数中,就像创建选项卡时所做的一样。

您可能还想尝试从 CDN 加载 jQuery 库。您将获得快速服务器和缓存的好处,这可能允许您将 lib 加载到标头中而不会对性能造成重大影响。

于 2011-11-25T02:37:37.873 回答
0

看看凯尔辛普森的 LABjs。我认为这会做你想要的......

于 2011-11-26T21:56:11.703 回答