转:用js判断页面是否加载完成

本文详细介绍了如何使用JavaScript的document.onreadystatechange方法监听页面加载状态,并通过document.readyState判断页面是否完全加载完成,进而实现表单提交操作。文章深入探讨了页面加载的不同阶段,包括初始化、载入、载入完成、交互及完成状态,并提供了实际应用示例。

用document.onreadystatechange的方法来监听状态改变,

然后用document.readyState == “complete”判断是否加载完成
代码如下:
document.onreadystatechange = subSomething;//当页面加载状态改变的时候执行这个方法.
function subSomething()
{
if(document.readyState == “complete”) //当页面加载状态

myform.submit(); //表单提交
}

页面加载readyState的五种状态

原文如下:

0: (Uninitialized) the send( ) method has not yet been invoked.
1: (Loading) the send( ) method has been invoked, request in progress.
2: (Loaded) the send( ) method has completed, entire response received.
3: (Interactive) the response is being parsed.
4: (Completed) the response has been parsed, is ready for harvesting.

翻译成中文为:

0 - (未初始化)还没有调用send()方法
1 - (载入)已调用send()方法,正在发送请求
2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调用了

在 JavaScript 中,判断 `iframe` 页面是否加载完成,通常可以通过监听 `iframe` 的 `load` 事件来实现。这个事件会在 `iframe` 的文档及其所有资源(如图片、脚本等)加载完成后触发。 --- ## ✅ 方法一:使用 `onload` 属性(HTML 中绑定) ```html <iframe id="myIframe" src="https://example.com" onload="iframeLoaded()"></iframe> <script> function iframeLoaded() { console.log('iframe 页面加载完成'); } </script> ``` --- ## ✅ 方法二:使用 JavaScript 动态绑定 `load` 事件监听器 这种方法更推荐,因为它将 HTML 和 JS 分离,更符合现代开发规范。 ```html <iframe id="myIframe" src="https://example.com"></iframe> <script> const iframe = document.getElementById('myIframe'); iframe.addEventListener('load', function () { console.log('iframe 加载完成'); // 可选:访问 iframe 内容(注意跨域限制) try { const iframeDocument = iframe.contentDocument || iframe.contentWindow.document; console.log('iframe 中的文档标题:', iframeDocument.title); } catch (e) { console.warn('无法访问 iframe 内容(可能是跨域)'); } }); </script> ``` --- ## ⚠️ 注意事项 ### 1. **跨域限制** 如果你的 `iframe` 加载的是不同域名的页面(例如 `https://example.com`),由于浏览器的 **同源策略(Same-Origin Policy)**,你将无法访问该页面的 DOM 或内容。 ```js try { const doc = iframe.contentDocument; } catch (e) { console.error('跨域访问被阻止'); } ``` ### 2. **多次触发问题** `load` 事件会在每次 `iframe` 内容变化时触发,比如你动态修改了 `src` 属性。你可以通过标志位或移除事件监听器来避免重复执行。 ```js iframe.addEventListener('load', function handler() { console.log('第一次加载完成'); iframe.removeEventListener('load', handler); }); ``` --- ## ✅ 方法三:使用 `contentWindow` 和 `document.readyState` 如果你需要更细粒度地控制加载过程,比如等待 DOM 就绪但不一定要等资源加载完成,可以使用如下方式: ```js iframe.addEventListener('load', function () { const win = iframe.contentWindow; if (win.document.readyState === 'complete') { console.log('iframe 文档已完全加载'); } }); ``` --- ## ✅ 方法四:使用 `MutationObserver`(适用于动态加载内容) 如果 `iframe` 页面本身是动态加载内容的(比如通过 AJAX 或 JS 动态渲染),你可以监听其 DOM 变化: ```js const observer = new MutationObserver(function (mutations) { console.log('iframe DOM 发生变化'); }); iframe.addEventListener('load', function () { const doc = iframe.contentDocument; observer.observe(doc.body, { childList: true, subtree: true }); }); ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值