我有一个问题。下面我动态创建脚本元素..问题是ga.onload = function()无法在ie中工作。其他浏览器如ff,chrome正常工作。但IE无法正常工作。代码是
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = "../../script/jquery.hint.js";
ga.onload = function(){
some operation here;
};
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
答案 0 :(得分:2)
您可以使其适用于所有浏览器。问题是IE报告状态不可靠,它并不总是报告完整,有时它只是报告加载。以下代码对我来说很好。
runFun = "";
var newScript = document.createElement('script');
if(document.all){
newScript.onreadystatechange = function() {
if (newScript.readyState == 'complete') {
newScript.onreadystatechange = "";
runFun = new Function("alert('here');");
}
else if (newScript.readyState == 'loaded') {
newScript.onreadystatechange = "";
runFun = new Function("alert('here');");
}
runFun();
}
}
else {
// most browsers
newScript.onload = function() {
var runFun = new Function("alert('here');");
runFun();
}
}
答案 1 :(得分:2)
尝试在src之前放置onload。事实证明,我在IE7 +中使用这种类型的程序化JS功能时出现的很多问题都是由程序员错误造成的,哈哈。我遇到了< img>的问题标签没有调用onload处理程序,当我以编程方式交换它时,它开始像我预期的那样神奇地工作。 #ieFAIL!
答案 2 :(得分:1)
脚本标记上的onload事件可能有效,也可能无效,具体取决于浏览器。
如果您使用的是jQuery,则可以使用$.getScript()
函数加载javascript文件并为其分配回调函数。加载javascript代码后会触发回调。
如果您没有使用JavaScript框架,那么您仍然可以使用上面提到的代码在DOM中注入脚本标记。这应该适用于所有浏览器,但没有防弹方法来确定脚本实际加载的时间。 onload可能也可能不起作用。
从这一点开始,您可以每隔几秒钟尝试“轮询”一个符号。这意味着您在注入脚本标记后每隔几秒就使用window.setInterval()
函数执行轮询功能。在轮询功能中,您可以使用JavaScript typeof
运算符来查看特定变量是否为undefined
(对于上面的示例,您将检查typeof jQuery.fn.hint
是否未定义)。一旦定义,取消轮询功能并执行某些操作。