2012-05-14 30 views
0

如果您想要切入点,这里是我的问题: 有什么办法来调用特定的脚本来加载第一个JavaScript?使用JavaScript从页脚加载JQuery

更多详细信息,请阅读以下:

我有一个从我的HTML <body>底部加载JavaScript文件。不幸的是,头上没有JQuery,所以我必须通过这个JavaScript文件来添加它。

我需要做的是添加一个JQuery lightbox插件。

我的问题是,当我加载页面,有时JQuery不是加载的第一件事。所以我收到错误“jQuery没有定义”。然后,这会为插件中未定义的方法引发更多错误。

这不会一直发生,只是有时候。这使我认为这是一个加载/操作顺序问题。

有没有什么办法可以保证我的JQuery脚本是第一件加载的东西?

这是我的一些JavaScript文件。

//Get head element 
var head = document.getElementsByTagName("head")[0]; 

//Create and insert JQuery 
var jquery = document.createElement('script'); 
jquery.type = 'text/javascript'; 
jquery.src = 'http://image.iloqal.com/lib/fe6b/m/1/jquery.1.7.2.js'; 

head.insertBefore(jquery,head.childNodes[4]); 

function thescripts() { 

    var fancybox = document.createElement('script'); 
    fancybox.type = 'text/javascript'; 
    fancybox.src = 'http://image.iloqal.com/ilejquery.fancybox-1.3.4.pack.js'; 
    head.appendChild(fancybox); 

    var thebody = document.getElementsByTagName('body')[0]; 

    thebody.appendChild(thediv); 
    thediv.appendChild(theimg); 


    //Run fancybox 
    thebody.onload = function() { 

    $('#lightbox').ready(function() { 
     $("#lightbox").fancybox().trigger('click'); 
    }); 
} 
}; 
if(jquery.attachEvent){ 
    jquery.attachEvent("onload",thescripts()); 
} else { 
    jquery.onload = thescripts(); 
} 

任何帮助表示赞赏!

回答

1

使用$(function() {...do your stuff here...});是要走的路是在执行脚本之前,请确保jQuery是装的,但你很可能使它更难为自己做:

thebody.onload = function() { 
    RunMyjQuery(); 
} 

function RunMyjQuery() { 
    if (typeof $ === 'undefined') { 
     setTimeout(RunMyjQuery, 500); 
    }else{ 
     $('#lightbox').ready(function() { 
      $("#lightbox").fancybox().trigger('click'); 
     }); 
    } 
} 
+0

RECURSION!为什么我没有想到这个?我不再收到错误,谢谢!虽然,这确实会给我提出一个我不熟悉的新错误。 ''创建'只能在扩展过程中使用',这是onload和附加事件的问题吗? – Dandy

+0

不应该是,但很难确切地说出问题是什么,但如果它是createElement,那么在onload处理程序中应该可以正常工作。另外,整体上应该有某种超时,所以如果jQuery出于某种原因根本不加载,间隔不会永远持续下去,另一方面,如果需要jQuery来正确显示网站,它并不重要! – adeneo

0

你打电话thescripts立即,虽然你尽量不要。使用此:

jquery.onload = thescripts; // notice no parentheses 

此外,您thebody.onload策略将无法正常工作。改为使用$(document).ready

$(document).ready(function{ 
    $('#lightbox').ready(function() { 
     $("#lightbox").fancybox().trigger('click'); 
    }); 
}); 
+0

我想现在这个样子,我你需要重新组织一些脚本。谢谢! – Dandy

2

试试这个。将这段代码添加到您的脚本中调用的JavaScript文件中。

<script type="text/javascript"> 

if(typeof jQuery == 'undefined'){ 
     document.write('<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></'+'script>'); 
    } 

</script> 

这将包括jQuery的,如果它没有加载。我认为这会解决你的问题。

+0

感谢您的回复。我以前试过这个,它不一定会修复它,但它肯定有更快的加载时间,允许jquery首先加载。我一定会保持这个实施。谢谢! – Dandy