使用javascript如何克服document.createElement('script')。对于ie版本的onload问题

时间:2010-12-22 06:58:21

标签: javascript

我有一个问题。下面我动态创建脚本元素..问题是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);

3 个答案:

答案 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是否未定义)。一旦定义,取消轮询功能并执行某些操作