javascript动态创建script标签判断是否加载完毕!

如题:我想网页随时加载一个js文件,这个文件内容不固定。创建后加载在head里,我写成一个函数,如图:每次加载我都要删除一次,因为HTML5刷新script标签的src貌... 如题:我想网页随时加载一个js文件,这个文件内容不固定。
创建后加载在head里,我写成一个函数,如图:

每次加载我都要删除一次,因为HTML5刷新script标签的src貌似无用?貌似网上搜索一些文档也这样说,不过我也不确定!不过确实刷新src的话,还是找不到加载的js里的函数,不过我通过id删除后重新创建解决了这个问题,这也不是重点吧 - -!
重点是我动态创建后,如何判断他是否加载完毕?否则我调用里面的函数会报错 未定义之类的!
如果单用延时我觉得不太好,因为js文件大小,网络状况都是未知数,延时过了也不一定加载完毕(或早就加载完了还在等不是浪费时间嘛)!总之感觉延时的方式不靠谱,因为不能确定是否加载成功,我调用的话会可能报错!
代码该怎么写呢?只考虑IE浏览器 6-11吧(我目前测试的11,上面的代码没问题)
附:我在上面代码这个script_post函数里调用动态创建加载里的函数就报错未定义,而在这个函数外部的后面调用就可以,那么我觉得肯定是还没加载好这个动态创建的js?
展开
 我来答
zgh26782000
2013-12-26 · TA获得超过1453个赞
知道小有建树答主
回答量:788
采纳率:0%
帮助的人:502万
展开全部
这个可以参考tangram里的callByBrowser方法,这个方法就是动态添加一个script标签,加载完后删除这个标签用的
地址 http://tangram.baidu.com/api#baidu.sio%28%29.callByBrowser%28%29
这是其中一部分代码,你自己修改下就行了
var scr =
document.createElement("SCRIPT"),
scriptLoaded
= 0,
options = opt_options
|| {},
charset =
options['charset'],
callback =
opt_callback || function(){},
timeOut
= options['timeOut'] || 0,
timer;

// IE和opera支持onreadystatechange
// safari、chrome、opera支持onload
scr.onload = scr.onreadystatechange = function () {
// 避免opera下的多次调用
if (scriptLoaded) {
return;
};

var readyState = scr.readyState;
if ('undefined' == typeof readyState
|| readyState == "loaded"
|| readyState == "complete") {
scriptLoaded = 1;
try {
callback();
clearTimeout(timer);
} finally {
scr.onload = scr.onreadystatechange = null;
baidu.sio._removeScriptTag(scr);
}
}
};
xiaozhang_o
推荐于2018-05-15 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:115
采纳率:100%
帮助的人:98.4万
展开全部
var _script = document.createElement('script');
_script.setAttribute('charset', sBianMa);
_script.setAttribute('type', 'text/javascript');
_script.setAttribute('src', sUrl);
document.getElementsByTagName('head')[0].appendChild(_script);
if (/msie/.test(window.navigator.userAgent.toLowerCase())) {
_script.onreadystatechange = function () {
if (this.readyState == 'loaded' || this.readyState == 'complete') {
_script.parentNode.removeChild(_script);
if (fCallback) fCallback();
}
}
} else if (/gecko/.test(window.navigator.userAgent.toLowerCase()) ||
/opera/.test(window.navigator.userAgent.toLowerCase())) {
_script.onload = function () {
_script.parentNode.removeChild(_script);
if (fCallback) fCallback();
}
} else {
_script.parentNode.removeChild(_script);
if (fCallback) fCallback();
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式