在页面完全加载后加载jQuery

15

我正在寻找一种方法,在页面完全加载后加载jquery。
虽然这里有很多关于它的问题和答案,但都描述了如何运行一个需要在页面或jquery完全加载后运行的脚本。
我要找的是先加载页面,然后调用jquery,在jquery加载后调用函数。类似于:

document.onload=function(){
   var fileref=document.createElement('script');
  fileref.setAttribute("type","text/javascript");
  fileref.setAttribute("src", 'http://code.jquery.com/jquery-1.7.2.min.js');
  //Here I need an event to know that jquery is 
  //loaded to run stuff that needs jquery
}

2
我能知道你为什么需要这个吗? - Irvin Dominin
谷歌分析一直在说我的脚本会减慢页面加载,并建议在页面加载后再加载它。 - Ashkan Mobayen Khiabani
2
也许你可以把Javascript代码放在一个单独的文件中,然后在body底部包含该脚本。 - user2109908
2
这篇文章非常好地解释了何时加载JavaScript以及为什么要这样做。https://dev59.com/k3fZa4cB1Zd3GeqPPD2J - caramba
11个回答

23

试试这个:

 $(document).ready(function() {
// When the document is ready
// Do something  
});

1
太好了!谢谢。我一直在想这个 .ready 是什么 :) - Ashkan Mobayen Khiabani

8
您也可以使用以下方法:
$(window).bind("load", function() { 
    // Your code here.
});

7

对于您的问题,解决方案可能是使用由Google托管的CDN和特定库进行附加:

https://developers.google.com/speed/libraries/devguide

此外,您可以在页面底部添加以下内容(就在</body>之前):
<script type="text/javascript">
(function() {
    var script = document.createElement('script')
    script.setAttribute("type", "text/javascript")
    script.setAttribute("src", "https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js")
    document.getElementsByTagName("head")[0].appendChild(script)
})();
</script>

然而,我认为这很危险。您的jquery有一个异步调用,因此您的jquery必须等待加载(即$(document).ready在这种情况下无法使用)。因此,我的答案是:像谷歌建议的那样使用CDN;将您的javascript放在</body>之前的底部;忽略来自分析器的标志。

在我调用它之后,需要运行 jQuery 的脚本放在哪里? - Ashkan Mobayen Khiabani
抱歉之前没有在评论中注明问题。如果您使用我的代码片段,可能唯一的选择是将您的代码放在下面。所以它会像这样: <script type="text/javascript"> (function() { ... my code ... })(); </script> 就在片段下面。代码将按顺序评估,因此您可以确信您将加载jQuery(我相信 - 实际上我总是使用谷歌的CDN)。 - Drachenfels
如果您只是使用常规方法引入资源,那么您可以使用 window.onload() 来等待 jQuery 加载完成。 - Josiah

4
建议将脚本加载在页面底部的<body>块中,以加快页面加载速度,示例如下:
<body>
<!-- your content -->
<!-- your scripts -->
<script src=".."></script>
</body>
</html>

3
你可以使用 .onload 函数。它会在页面完全加载完成后包括图像时运行一个函数。
window.onload=function(){
      // Run code
    };

另一种方式是:在页面底部包含脚本。

$( window ) 表示 jQuery 已经在文档中加载。但是如果没有 jQuery,我们需要创建它并运行 jQuery 代码。 - Ashkan Mobayen Khiabani
1
我在这里使用JavaScript的window.onload函数。 - Nishu Tayal

2
你可以尝试使用你的函数,并使用超时等待,直到jQuery对象加载完成。
代码:
document.onload=function(){
    var fileref=document.createElement('script');
    fileref.setAttribute("type","text/javascript");
    fileref.setAttribute("src", 'http://code.jquery.com/jquery-1.7.2.min.js');
    document.getElementsByTagName("head")[0].appendChild(fileref);
    waitForjQuery();
}

function waitForjQuery() {
    if (typeof jQuery != 'undefined') {
        // do some stuff
    } else {
        window.setTimeout(function () { waitForjQuery(); }, 100);
    }
}

这是我正在寻找的,有没有一种方法可以在加载jQuery完成时触发事件,而不是使用超时来检查它? - Ashkan Mobayen Khiabani
我正在使用这种方法,目前找不到任何替代方案。 - Irvin Dominin
这个解决方案可能有些过度,你可以牺牲浏览器的性能来获得更好的 Google Analytics 性能。这不是缺乏常识吗?使用带有公共库的 CDN + 一个压缩的自定义 JavaScript 应该已经足够了,我个人认为。 - Drachenfels
取决于带宽、电脑/浏览器速度等因素。这是为了确保。 - Irvin Dominin

1
我的猜测是您在页面的部分加载了jQuery。虽然这并不会造成伤害,但会减慢页面加载速度。尝试使用以下模式以加快DOM树的初始加载时间:
<!doctype html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">

    <!-- CSS -->
    <link rel="stylesheet" type="text/css" href="">
</head>

<body>
    <!-- PAGE CONTENT -->

    <!-- JS -->
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
    <script>
        $(function() {
            $('body').append('<p>I can happily use jQuery</p>');
        });
    </script>
</body>

</html>

只需将您的脚本添加到<body>标签的末尾。

由于实际原因,有些脚本需要放在头部,最突出的库是Modernizr


由于您始终需要等待dom-ready事件(这就是为什么要使用$(document).ready(...)),因此您不会注意到任何区别。 - nirazul

0
如果您可以从自己的服务器加载jQuery,则可以将以下内容附加到您的jQuery文件中:

jQuery(document).trigger('jquery.loaded');

然后你就可以绑定到那个触发事件。


0

将您的脚本放在页面底部,在关闭body标签之前。

更多信息 在此处


0

如果您想在内容加载完成之前避免加载jquery,最好的方法是将其引用放在页面底部,就像其他答案中所说的那样。

Jquery使用的一般提示:

  1. 使用CDN。这样,您的网站可以使用用户计算机上可能已缓存的版本。开头的//允许它被调用(并使用相同的资源),无论是http还是https。例如:

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

使用CDN有几个重要的好处:它使得用户更有可能从另一个站点缓存它,因此不会下载(也不会阻止渲染)。此外,CDN使用最近、最快的连接,这意味着如果它们确实需要加载它,它可能比连接到您的服务器更快。来自Google的更多信息。

放置脚本在底部。尽量将您的js代码放在页面底部。我使用php在页脚之下包含一个包含所有JS资源的文件。
如果您正在使用模板系统,可能需要在整个HTML输出中分布javascript。如果您在渲染页面时调用使用jquery的脚本,这将导致错误。为了使您的脚本等待jquery加载完毕,请将它们放入:
window.onload() = function () { //... 当用户无交互时执行的js代码 ... }
这样可以防止错误发生,同时在用户交互之前运行,并且不需要定时器。
当然,如果jquery已经被缓存,那么它放在哪里并不太重要,除了那些会告诉您阻塞渲染的页面速度工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接