【问题标题】:Loading jQuery if not loaded - failed approach如果未加载,则加载 jQuery - 失败的方法
【发布时间】:2013-03-05 17:19:34
【问题描述】:

这就是我所拥有的:

<script src="myscript.js" type="text/javascript"></script>
<script type="text/javascript">testfunction("hello");</script>

在 myscript.js 中:

if(!window.jQuery)
{
  var script = document.createElement('script');
  script.type = "text/javascript";
  script.src = 'jquery-1.9.0.min.js';
  document.getElementsByTagName('head')[0].appendChild(script);
}

function testfunction(str) {
    $(document).ready(function () {
      alert(str);
    });
}

当然,当前的测试函数不需要 jQuery,但它会是必需的。使用这种方法,当调用 testfunction() 时,jQuery 被下载但不加载到浏览器(Uncaught ReferenceError: $ is not defined)。

我可以做的是在加载我的 JS 之前在不同的脚本中加载 jQuery。在这种情况下,它会起作用,但我会拥有三个不同的脚本,老实说,这似乎并不优雅。

还有其他方法可以实现吗?

谢谢!

【问题讨论】:

  • 只要先用 jQuery 添加脚本标签,然后再添加依赖 jQuery 的脚本,它应该可以开箱即用,没有任何技巧?
  • 只需以“正常”方式添加脚本。它比任何动态加载它的尝试都优雅得多。
  • 我不想为用户加载 jQuery 两次(这是嵌入到另一个网页中的 JS,这对我来说是失控的,这就是为什么我要检查网页是否强制用户已经加载 jQuery)。

标签: javascript jquery html


【解决方案1】:

您可能想尝试查看此answer。它可能不会等到 jQuery 完全加载。

【讨论】:

    【解决方案2】:

    使用您的代码,脚本将被异步加载。您需要在脚本标签中添加一个 onload 事件,该事件将触发依赖于 jQuery 的部分。

    如果您希望脚本以同步方式加载,请使用document.write

    window.jQuery||document.write(unescape("%3Cscript src='"+jQueryURL+"' type='text/javascript'%3E%3C/script%3E"));
    

    document.write 技术非常常见,请记住,在文档加载后不能使用它(否则它将覆盖整个页面)。

    如果您想在更大范围内使用动态加载,请查看现有的加载程序或 AMD 库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      相关资源
      最近更新 更多