JavaScript在A页面判断B页面加载完毕(iframe load)

本文介绍了一种使用iframe元素来判断第三方页面加载完成的方法,并通过简单的HTML、CSS和JavaScript代码实现了加载完成后隐藏loading动画的功能。

今天遇到一个需求,在A页面上判断B页面是否加载完毕(B页面是第三方页面),加载完毕时隐藏loading动画。。。

而平时我们一般做的事是在B页面上判断B页面是否加载完毕,进行操作。

if(document.readyState == 'Loaded'){
// 我们的操作
//页面加载readyState的五种状态 原文如下:
//0: (Uninitialized) the send( ) method has not yet been invoked.
//0 - (未初始化)还没有调用send()方法
//
//1: (Loading) the send( ) method has been invoked, request in progress.
//1 - (载入)已调用send()方法,正在发送请求
//2: (Loaded) the send( ) method has completed, entire response received.
//2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
//3: (Interactive) the response is being parsed. 4: (Completed) the response has been parsed, is ready for harvesting.
//3 - (交互)正在解析响应内容
//
//4: (Completed) the response has been parsed, is ready for harvesting.
//4 - (完成)响应内容解析完成,可以在客户端调用了
}。

 那么在A页面做B页面(新页面)的加载判断,据我所知,这是做不到(也许是我不知道有其他更高明的方法),随采用了iframe的方式去做。在B页面嵌套在A页面里,就可以做了。
PS:一些框架,如NG,SUI等里面貌似可以做(我没有去尝试,为了一个loading引入一个大框架,血亏啊)。
话不多说,主要代码如下,
完整demo下载地址:https://pan.baidu.com/s/1o8yJLm6(包括了loading)
主要代码:
HTML:
<iframe id="frame" frameborder="0" src="">
</iframe>

JS:
iframe_load: function () {
//兼容IE7-8
    if ($('#frame')[0].attachEvent) {
$('#frame')[0].attachEvent('onload', function () {
$('#frame').show();
$('#loading').hide();
})
} else {
$('#frame')[0].onload = function () {
$('#loading').hide();
$('#frame').show();
}
}
},
CSS:
#frame{
height: 100%;
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
}

本身JQ也有load,但是本人没用成功,一直报错,报错JQ的东西。
试过$.load(),但是遇到跨域问题。





转载于:https://www.cnblogs.com/leolovexx/p/6230222.html

要在 iframe 页面加载完成后获取其他组件传递的数据,可以采用以下几种方法: ### 1. 使用 `load` 事件监听 你可以通过监听 iframe 的 `load` 事件来确认其内容已经完全加载完成。一旦 iframe 加载完毕,你就可以安全地访问其中的内容。 ```javascript const iframe = document.getElementById('myIframe'); iframe.onload = function() { // 如果同源策略允许的情况下可以直接操作iframe内的DOM const innerDoc = iframe.contentDocument || iframe.contentWindow.document; // 假设我们要从父窗口或其他地方获得数据,并将其注入到ifame中去。 }; ``` 需要注意的是,由于浏览器的安全限制(即“同源政策”),只能对来自相同来源的文档执行此操作;如果两个页面不是由相同的协议、端口和主机提供的,则无法直接交互。 ### 2. 利用 postMessage API 进行跨域通信 当涉及到不同域名之间的通信时,现代浏览器提供了一种更安全的方式来处理这种情况 - 即使用 Window.postMessage 方法来进行信息交换。这是一种让不同源的网页之间能够互相发送消息的方式。 **父级向子帧 (iframe) 发送数据** ```html <!-- 父页面 --> <iframe id="childFrame" src="https://example.com"></iframe> <script type="text/javascript"> window.onload = function () { var dataToBeSent = { key: 'value'}; setTimeout(() => { let childIFrameElement = document.getElementById("childFrame"); if(childIFrameElement){ childIFrameElement.contentWindow.postMessage(dataToBeSent, '*'); // * 表示接受任意目标站点的消息 } },0); } </script> ``` **子页接收并响应** ```javascript // 子页面 JavaScript 代码 window.addEventListener('message', receiveMessage, false); function receiveMessage(event) { console.log('接收到的信息:', event.data); // 安全检查:验证消息是否来自预期的源 if (event.origin !== "http://parent-domain") return; // 对传入的数据进行相应处理... } ``` 这种方法不仅适用于父子框架间的通讯,还可以用于任何一对彼此信任的不同域下的 web 应用程序间的数据共享。 综上所述,在确保 iframe 内容已成功加载之后再尝试获取所需资源是一个良好实践。同时考虑安全性因素选择合适的沟通机制也很重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值