如何检查页面重新加载是不是完成

Posted

技术标签:

【中文标题】如何检查页面重新加载是不是完成【英文标题】:How to check if page reload is finished如何检查页面重新加载是否完成 【发布时间】:2020-07-01 04:49:03 【问题描述】:

我有一个用户单击的按钮,它会提交表单并在提交时重新加载页面。我想检查页面的重新加载是否完成。我尝试使用下面的 但这会在表单提交后甚至在加载完成之前直接发出警报。

if(window.performance.navigation.type == 0)
    alert('loaded');

如何检查加载是否完成。提前致谢!

【问题讨论】:

【参考方案1】:

DOMContentLoaded 和 Load 可用于此目的 (link)

DOMContentLoaded – 浏览器完全加载 html,DOM 树是 已构建,但图片和样式表等外部资源可能 尚未加载。

load – 不仅加载了 HTML,还加载了所有 外部资源:图片、样式等

Load 应该只用于检测完全加载的页面。在更适合 DOMContentLoaded 的地方使用 load 是一个常见的错误。

    window.addEventListener('DOMContentLoaded', (event) => 
        console.log('DOM fully loaded and parsed');
    );

   //===================

   window.onload = function()  
    // same as window.addEventListener('load', (event) => 
    alert('Page loaded');

    // image is loaded at this time
    alert(`Image size: $img.offsetWidthx$img.offsetHeight`);
   ;

根据您的问题,您希望在提交表单后进行检查。因此,当表单提交时,窗口会重新加载,整个文档也会重新加载。

您也可以使用 document.readyState 来检查文档是否已完全加载。

document.readyState property 可以用来检查文件是否 准备好了。来自 MDN:

值 文档的 readyState 可以是以下之一:

loading – 文档仍在加载中。交互式 - 文档 已完成加载并且文档已被解析但 图像、样式表和框架等子资源仍然存在 加载。完成 - 文档和所有子资源已完成 加载。该状态表示加载事件即将触发。

你可以使用下面的代码。

    if(document.readyState === "complete") 
    // Fully loaded!
    
    else if(document.readyState === "interactive") 
         // DOM ready! Images, frames, and other subresources are still 
       downloading.
    
    else 
       // Loading still in progress.
       // To wait for it to complete, add "DOMContentLoaded" or "load" 
         listeners.

    window.addEventListener("DOMContentLoaded", () => 
        // DOM ready! Images, frames, and other subresources are still 
        downloading.
    );

    window.addEventListener("load", () => 
        // Fully loaded!
    );
 

【讨论】:

如何将其绑定到按钮,以便在单击按钮后检查加载?【参考方案2】:

您可以使用onreadystatechange 事件并检查document readyState。如果readyState 的值为complete,则显示警报。

readystatechange 事件在文档的 readyState 属性发生变化时触发

或者只是在正文的末尾加载 javascript 代码。

例子:

document.onreadystatechange = () => 
  if (document.readyState === 'complete') 
     alert('loaded');
  
;

【讨论】:

这个很好用,但唯一的问题是,当我刷新或第一次打开页面时,它也会发出警报。如何将其绑定到按钮,以便在单击按钮后它可以工作。 您可以在 if check 中为按钮添加事件监听器。 添加事件监听器而不是警报。【参考方案3】:

你可以使用 window.onload:

window.onload = function() 
  alert("loaded");
;
<button onclick="location.reload()">Reload</button>

https://developer.mozilla.org/en-US/docs/Web/API/Window/load_event

【讨论】:

以上是关于如何检查页面重新加载是不是完成的主要内容,如果未能解决你的问题,请参考以下文章

C#WINFORM中 如何把一个已经加载完成的窗体在重新加载

单击reactjs时如何重新加载表格

如何实现不刷新页面,只重新加载js文件?

从 iFrame 加载顶部框架中的页面

如何实现不刷新页面,只重新加载js文件

链接到锚点并强制重新加载当前页面