小编Eri*_*ier的帖子

可以信任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万
查看次数

如何在IE中的文档上触发"onload"事件

我目前正在为Javascript方法开发单元测试,以检测文档的准备情况.此代码已经处于框架级别,因此请避免在jQuery或其他库中实现此代码.

我已使用以下代码成功模拟了'readystatechange'更改事件:

var event;
event = document.createEventObject();
event.type = 'readystatechange';
document.fireEvent('onreadystatechange',event);
Run Code Online (Sandbox Code Playgroud)

我没有为'load'事件做同样的事情.以下代码导致IE7中的无效参数错误,在最后一行调用fireEvent抛出:

event = document.createEventObject();
event.type = 'load';
document.fireEvent('onload',event);
Run Code Online (Sandbox Code Playgroud)

有没有人这样做过,或者之前没有这样做过?我也对任何以不同方式解雇事件的建议感兴趣.

编辑:按照Crescent Fresh的建议,我将代码更改为:

event = document.createEventObject();
event.type = 'load';
document.body.fireEvent('onload',event);
Run Code Online (Sandbox Code Playgroud)

没有更多的错误,但'onload'的监听器不会触发.这是我配置它的方式:

document.attachEvent('onload',listener);
Run Code Online (Sandbox Code Playgroud)

javascript events internet-explorer unit-testing document

7
推荐指数
1
解决办法
2万
查看次数

切换到插入模式时是否可以切换vim选项?

我最近发现拼写选项归功于Code Review上的这个答案,我觉得该选项非常有用(编辑时)并且非常烦人(在阅读代码时,因为所有的误报).

我想以某种方式在切换到插入模式时自动启用该选项:

set spell
Run Code Online (Sandbox Code Playgroud)

并在切换回正常模式时自动禁用它:

set nospell
Run Code Online (Sandbox Code Playgroud)

vim spell-checking

7
推荐指数
1
解决办法
842
查看次数

如何在Internet Explorer中触发script.onerror?

MSDN上onerror页面指出,onerror处理程序可以附加到脚本元素,并且"在对象加载期间发生错误时触发".

出于单元测试的目的,我试图让这个onerror处理程序触发,但找不到合适的例子.

以下代码在Firefox中触发错误,但Internet Explorer中不显示任何警报

<script src="http://www.google.com/NOTFOUND.js" onerror="alert('error fired')"></script>
Run Code Online (Sandbox Code Playgroud)

有没有人知道script.src的值会触发附加到script.onerror的处理程序?

javascript scripting internet-explorer unit-testing

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