为什么要调用$ .getScript而不是直接使用<script>标记?</script>

时间:2010-12-08 22:10:15

标签: javascript jquery script-tag getscript

我不明白替换它的原因:

<script src="js/example.js"></script>

用这个:

$.getScript('js/example.js', function() {
  alert('Load was performed.');
});

是否有使用jQuery版本的特殊原因?

5 个答案:

答案 0 :(得分:8)

我能想到的唯一原因是你在加载脚本时得到了回调。但是,您也可以使用script标记,使用load事件(或真正的旧IE,onreadystatechange)来获取回调。

相比之下,有几个否定这样做,尤其是getScriptSame Origin Policy约束,而script标签是不

即使您需要动态加载脚本(并且有几个原因可能需要这样做),坦白说除非您确实需要回调,否则我会说您最好只需添加一个脚本来加载脚本script代码:

$('head:first').append("<script type='text/javascript' src='js/examplejs'><\/script>");

(注意:您需要在上面的结束标记中使用其他不必要的\,以避免过早结束此代码存在的脚本标记,如果它位于内联脚本标记中。)

以这种方式添加的

script标记受制于同源策略。如果您想要load回调,那么:

$("<script type='text/javascript' src='js/examplejs'><\/script>")
    .on("load", function() {
        // loaded
    })
    .appendTo('head:first');

(正如我所说,对于真正老的IE,你必须做更多的事情,但这些天你不需要处理它们。)

答案 1 :(得分:6)

我可以想到你可能使用jQuery表单的三个原因:

  1. 您希望所有脚本声明都位于文档的顶部,但您也知道放置脚本声明会强制浏览器完全下载它们,然后再继续进行页面呈现过程。这可能会引入可测量的延迟。 jQuery表单将安排脚本加载,直到文档下载完毕,类似于将所有<script>标记放在文档的 end 的效果,只是没有语法怪异
  2. <script>机制不适用于HTML文档本身不存在的脚本;也就是说,如果包含在<script>页面上的脚本想要加载脚本,它就没有选择,只能使用基于JavaScript的方法,例如调用jQuery函数。
  3. jQuery表单允许以提供的回调函数的形式通知脚本的成功执行。

答案 2 :(得分:0)

无需这样做..

如果你想动态加载脚本(需要时,而不是从头开始),你就这样做了

答案 3 :(得分:0)

该脚本可能依赖于jQuery,因此如果它没有加载jQuery,它将阻止浏览器尝试加载它。

jQuery可能无法加载的原因有很多,从简单的网络故障到未被NoScript用户列入白名单的CDN。

答案 4 :(得分:0)

可能在加载脚本时控制?在javascript繁重的页面上,在加载基本内容之前,等待加载一些非必要的东西可能是值得的。