JavaScript如何在延迟加载的脚本就绪时捕获事件?

JavaScript如何在延迟加载的脚本就绪时捕获事件?,javascript,events,Javascript,Events,我有一个延迟加载的JavaScript文件,当文件中的类准备好使用时,如何捕获事件?我只需要在特定情况下加载此脚本。因此,它不是通过onload加载的,而是在if子句中加载的 我从这里获得的延迟加载代码: 更新: 对不起,伙计们,我完全忘记了Ajax!:)我太专注于我的问题了,以至于我没有看到@Tokimon的解决方案。通过jQuery最简单的解决方案是: $.getScript('http://yourdomain.com/script.js', function() { // call

我有一个延迟加载的JavaScript文件,当文件中的类准备好使用时,如何捕获事件?我只需要在特定情况下加载此脚本。因此,它不是通过onload加载的,而是在if子句中加载的

我从这里获得的延迟加载代码:


更新:
对不起,伙计们,我完全忘记了Ajax!:)我太专注于我的问题了,以至于我没有看到@Tokimon的解决方案。通过jQuery最简单的解决方案是:

$.getScript('http://yourdomain.com/script.js', function() {
  // callback or use the class directly
});

因为它需要一个HTTP请求,所以您应该能够在其上放置一个onload事件

s.onload = function() {
  // do something
}

在《更快的网站》一书中,Steve Souders提供了一个解决方案,可以看到。

如果我理解您想要正确完成的任务。这就是回调方法存在的原因

这里解释得很好
或者您可以通过ajax获取脚本。然后,您确定在触发ajax成功事件时加载了脚本:)


您还可以使用XMLHttpRequest加载文件。

Opera将启动两次回调。好的,这意味着“已加载”(HTTP=200)文件中的类已准备好使用?@powtac是的,这意味着已下载并已解析。分号出现是有原因的。
if (s.readyState) s.onreadystatechange = function () {
    if (s.readyState === "loaded" || s.readyState === "complete") {
        s.onreadystatechange = null;
        callback();
    }
}; else s.onload = function () {
    callback();
};
var onloadCallback = function() {
    alert('onload');
}

var s   = document.createElement('script');
s.type  = 'text/javascript';
s.async = true;
s.onreadystatechange = function () { // for IE
  if (this.readyState == 'complete') onloadCallback();
};
s.onload = onloadCallback; // for other browsers
s.src   = 'http://yourdomain.com/script.js';
var x   = document.getElementsByTagName('script')[0]
x.parentNode.insertBefore(s, x);   
if (s.readyState) s.onreadystatechange = function () {
    if (s.readyState === "loaded" || s.readyState === "complete") {
        s.onreadystatechange = null;
        callback();
    }
}; else s.onload = function () {
    callback();
};