【问题标题】:Waiting for a script object to load [duplicate]等待脚本对象加载[重复]
【发布时间】:2012-07-23 05:06:53
【问题描述】:

我正在尝试创建一个 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 的消息框(错误结果) 但是如果我把它分成这样的执行:

第一步:

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

第二步:

alert($('a'));

效果很好,我得到了我想要的结果。

问题是我该怎么做才能在一个批次中运行它?

【问题讨论】:

  • 你把这段代码放在ready事件里了吗?
  • 您所说的“单独处决”非常不清楚。我确定您的代码中没有“step1”和“step2”这两个词,但是...
  • 我正在从谷歌浏览器的控制台运行代码

标签: javascript jquery


【解决方案1】:

一般来说,您需要在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+ 中运行。

【讨论】:

  • 我在哪里添加我的警报($('a'))?
  • 请记住我是从 Google Chrome 控制台运行它
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    如果您想要一个可靠的方法并测试完整的脚本负载的侦听器,请尝试第三方库,例如: http://yepnopejs.com/

    不推荐从头开始一个脚本加载器,今天不行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多