相关疑难解决方法(0)

可以信任script.readyState来检测动态脚本加载的结束吗?

我使用动态脚本加载来减少初始页面加载的持续时间.为确保可以访问脚本定义的函数和对象,我需要确保脚本已完全加载.

为此我开发了自己的Javascript库,因此对该主题进行了大量研究,研究了它在不同库中的完成情况.在与此问题相关的讨论中,LABjs的作者Kyle Simpson 表示:

LABjs(以及许多其他加载器)在所有脚本元素上设置"onload"和"onreadystatechange",知道某些浏览器会触发一个,有些浏览器会触发另一个...

在撰写本文时,您可以在当前版本的jQuery中找到此示例,v1.3.2:

// Attach handlers for all browsers
script.onload = script.onreadystatechange = function(){
    if ( !done && (!this.readyState ||
    this.readyState == "loaded" || this.readyState == "complete") ) {
        done = true;
        success();
        complete();

        // Handle memory leak in IE
        script.onload = script.onreadystatechange = null;
        head.removeChild( script );
    }
};
Run Code Online (Sandbox Code Playgroud)

这是最先进的技术,但在分析Opera 9.64中的一个奇怪的行为时,我得出的结论是,使用这种技术,onload回调过早被解雇了.

我会在回答这个问题时发表自己的研究结果,并希望收集社区的进一步证据和反馈.

javascript scripting load dynamic labjs

31
推荐指数
1
解决办法
3万
查看次数

标签 统计

dynamic ×1

javascript ×1

labjs ×1

load ×1

scripting ×1