等待脚本对象加载

时间:2012-07-24 19:55:30

标签: javascript jquery

我正在尝试创建一个jquery脚本,该脚本将从google chrome的控制台运行并分析页面。 我的问题是,当我运行以下代码时:

var jq = document.createElement('script');
jq.src = "http://code.jquery.com/jquery-latest.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
alert($('a'));

我收到一个带有null的消息框(结果不好) 但是,如果我把它分开来执行这样的执行:

步骤1:

var jq = document.createElement('script');
jq.src = "http://code.jquery.com/jquery-latest.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);

步骤2:

alert($('a'));

效果很好,我得到[对象]这是我想要的结果。

问题是如何在一个批次中运行此操作?

3 个答案:

答案 0 :(得分:2)

通常,您需要在script nodes onload 事件上附加一个侦听器。 jQuery在完全转移并执行之前不可用。像

var jq   = document.createElement('script'),
    head = document.head || document.getElementsByTagName('head')[0] || document.documentElement;

    jq.src = "http://code.jquery.com/jquery-latest.min.js";
    jq.onload = jq.onreadystatechange = function() {
    if(!jq.readyState || /loaded|complete/.test( jq.readyState ) ) {
        jq.onload = jq.onreadystatechange = null;
        jq = undefined;
    }
}

head.insertBefore(jq, head.firstChild);

上面的代码非常具有岩石性,并且可以在IE6 +中运行。

答案 1 :(得分:0)

您可以尝试类似this的内容并检查脚本的就绪状态:

jq.onreadystatechange = function() {
  if (this.readyState == 'complete') {
     alert($('a'));
  }
}

答案 2 :(得分:0)

如果您想要一个可靠的方式和经过测试的监听器来完整加载脚本,请尝试第三方库,例如: http://yepnopejs.com/

不推荐从头开始创建脚本加载器,而不是今天。