我在a.js中当文档加载完毕后动态加载其他需要的js文件,加载文件和方法如下var dHeader = document.getElementsByTagName( "head" )[0];
//for循环
elem = document.createElement("link");
elem.setAttribute("rel", "stylesheet");
elem.setAttribute("type", "text/css");
elem.setAttribute("href", srcs[i]);
dHeader.appendChild(elem);
//dynamicInclude(['jquery.js', 'user.js']);user.js会用到jQuery对象,比如在user.js的第一行 定义 var alias = jQuery;问题是:
执行页面完成时,多数时候功能正常,多刷新几次偶尔控制台报alias = jQuery中jQuery未定义的错误
感觉jquery.js和user.js都是异步执行的,搜了下说可以用ansyc和defer属性进行控制,但我试了无论怎么设置这个属性问题依然存在
求指教!!!
//for循环
elem = document.createElement("link");
elem.setAttribute("rel", "stylesheet");
elem.setAttribute("type", "text/css");
elem.setAttribute("href", srcs[i]);
dHeader.appendChild(elem);
//dynamicInclude(['jquery.js', 'user.js']);user.js会用到jQuery对象,比如在user.js的第一行 定义 var alias = jQuery;问题是:
执行页面完成时,多数时候功能正常,多刷新几次偶尔控制台报alias = jQuery中jQuery未定义的错误
感觉jquery.js和user.js都是异步执行的,搜了下说可以用ansyc和defer属性进行控制,但我试了无论怎么设置这个属性问题依然存在
求指教!!!
解决方案 »
- Web问题
- javascript:history.back();返回后表单数据丢失?
- 不学mootools的人 都是傻(不是a 也不是c)???我又一次偷着笑~
- 求助:实现左边复选框的内容添加到右边的框中
- asp.net 如何调用self host的 wcf service
- to:woyingjie,请教另一个功能
- 被恶意网站www.58q.com篡改的IE配置,如何恢复?
- 求一正则表达式:表示以"http://"开头的网址
- 从另一个页面选择的数据后自动填入到父页面的文本框中怎么写代码?
- QQ互联问题-----------------------有报酬!
- 关于JS报错后找不到对象
- JavaScript判断浏览器的问题,解决兼容问题
参考下
http://www.cnblogs.com/jimtomjim/archive/2010/04/01/1702106.html
再贴个自己封装的
Cme.loader.js;(function(w){
var loader = function(){
var dc = document;
function createScript(url, callback){
var urls = url,
scripts = [],
completed = 0;
for( var i = 0, len = urls.length; i < len; i++ ){
scripts[i] = dc.createElement('script');
scripts[i].src = urls[i];
dc.getElementsByTagName('head')[0].appendChild(scripts[i]);
if( scripts[i].readyState ){ //ie
scripts[i].onreadystatechange = function(){
if( this.readyState == 'complete' || this.readyState == 'loaded' ){
this.onreadystatechange = null; //确保事件不被处理2次
completed++;
completed >= urls.length ? callback() : '';
}
}
}else{ //not ie
scripts[i].onload = function(){
completed++;
completed >= urls.length ? callback() : '';
}
}
}
}
function createLink(url, callback){
var urls = url,
links = [];
for( var i = 0, len = urls.length; i < len; i++ ){
links[i] = dc.createElement('link');
links[i].rel = 'stylesheet';
links[i].href = urls[i];
dc.getElementsByTagName('head')[0].appendChild(links[i]);
}
callback();
}
return {
load: function(option, callback){
var _type = option.type || 'js',
_url = option.url,
_callback = callback || function(){};
switch( _type ){
case 'js':
case 'javascript':
createScript(_url, _callback);
break;
case 'css':
createLink(_url, _callback);
break;
}
return this;
}
}
}();
w.Cme ? '' : w.Cme = {};
w.Cme.loader = loader;
})(window);
test.html<!DOCTYPE HTML>
<html>
<head>
<meta charset="gb2312" />
<title></title>
<style>
</style>
<script src="Cme.loader.js"></script>
</head>
<body>
123
<script>
Cme.loader.load({
type: 'css',
url: [
'http://yui.yahooapis.com/2.9.0/build/reset/reset-min.css',
'http://community.csdn.net/ui/homepage/css/index.css'
]
},function(){
alert('css加载完成')
}).load({
type: 'js',
url: [
'http://code.jquery.com/jquery-latest.js'
]
},function(){
alert( $ );
})
</script>
</body>
</html>
这样会阻塞页面的加载比如
<script src="jquery.js"></script>
<script src="testFN.js"></script>
那么页面会等jquery加载完毕后再加载testFN.js
这样就产生了依赖顺行.
详细的 楼主 可以 参考
http://www.slideshare.net/itchina110/labjs-7895837
这样会阻塞页面的加载比如
<script src="jquery.js"></script>
<script src="testFN.js"></script>
那么页面会等jquery加载完毕后再加载testFN.js
这样就产生了依赖顺行.
详细的 楼主 可以 参考
http://www.slideshare.net/itchina110/labjs-7895837
别用异步的呗。
<script src='jquery.js'></script>
<script src='user.js'></script>
如果非要用到代码中,请参考动态加载js
document.createElement然后用事件判断readyState是否加载完成再加载下一个
ansyc和defer各浏览器实现肯定不兼容