Javascript 检测页面是否正在加载任何资源

Javascript 检测页面是否正在加载任何资源,javascript,jquery,ajax,phantomjs,Javascript,Jquery,Ajax,Phantomjs,是否可以确定页面是否在任何时候加载任何资源,包括加载HTML文档之后或从新的ajax请求加载 用例是我有一个需要截图的站点,但我想等到所有东西都呈现出来。这意味着: DOM已完全加载(即使使用普通JS也很容易检测到这一点) 所有资源(css、js等)都已加载 操作中可能发生的任何AJAX调用都已完成。(可能是这里最难的部分) 检测动画和CSS转换是很困难的,并且不是必需的。如果你有一个解决方案,包括1-3,我会接受它。如果你还知道如何检测CSS转换和JS动画等,那么你就太棒了,我承认:)我认为要

是否可以确定页面是否在任何时候加载任何资源,包括加载HTML文档之后或从新的ajax请求加载


用例是我有一个需要截图的站点,但我想等到所有东西都呈现出来。这意味着:

  • DOM已完全加载(即使使用普通JS也很容易检测到这一点)
  • 所有资源(css、js等)都已加载
  • 操作中可能发生的任何AJAX调用都已完成。(可能是这里最难的部分)
  • 检测动画和CSS转换是很困难的,并且不是必需的。如果你有一个解决方案,包括1-3,我会接受它。如果你还知道如何检测CSS转换和JS动画等,那么你就太棒了,我承认:)

    我认为要回答这个问题,我们应该从不同的角度出发。 首先,您希望使用

    $( window ).load(function() {
      // Run code
    });
    
    这将迫使您的函数在页面(包括图形)完全加载时启动

    引自jquery网站

    加载事件在元素和所有子元素完全加载后发送给元素。此事件可以发送到任何元素 与URL关联:图像、脚本、帧、iFrame和 窗口对象

    这种方法将解决第1点和第2点,它与加载DOM时触发的方法略有不同

    第3点有点难处理,但可以使用

    $( document ).ajaxStop(function() {
      //run code here
    });
    
    因为它注册了一个在所有Ajax请求完成时调用的处理程序-

    引自jquery网站

    每当Ajax请求完成时,jQuery都会检查是否存在任何其他未完成的Ajax请求。如果没有保留,jQuery将触发 ajaxStop事件。已注册的任何和所有处理程序 此时,将使用.ajaxStop()方法执行。ajaxStop 如果最后一个未完成的Ajax请求是 通过在beforeSend回调函数中返回false取消

    最后的代码如下所示:

    $( window ).load(function() {
          $( document ).ajaxStop(function() {
               //run code here
           });
    });
    

    希望有帮助

    您可以监视一些东西,如ajax、jsonp、图像、音频、视频和一些iFrame,但是使用JS很难或不可能观察到背景图像、屏幕外内容和字体。您最好监控尽可能多的项目,每个事件重新安排5秒的延迟,最终触发您的屏幕截图实用程序。可能重复:但也可能保留您的答案如果您能提供一些澄清,我们可以提供准确的答案。“但要等到一切都呈现出来。”-好,您的问题是使用动画或计时器触发的东西等。我不相信您能真正知道一个网页是否“完成”,因为它可能是一个包含多个动画的网页。@user3558931-您希望得到什么澄清?:p从1.8开始,
    load
    事件被弃用。Good point@BenFortune,但正如我从中看到的,您仍然可以使用$(window).on(“load”,fn(){});方法