Layui弹出层layer.open如何实现在加载外部URL时显示进度条

阿墨吖_9461

阿墨吖_9461

2026-04-28

506人浏览

原创

应使用 type: 1 + 手动插入 iframe 并监听 onload 事件配合 layer.load()/closeLoad() 实现加载提示;跨域时不可靠,同源推荐 fetch 替代 iframe 以精准控制加载状态。

layer.open 加载外部 URL 时默认不显示进度条

layui 的 layer.open 在 type: 2(iframe 层)下加载外部 url,本身不提供内置进度条;它只在 type: 1(页面层)配合 content: '' + 手动加载时才容易介入 dom。所以想“在 iframe 加载过程中显示进度条”,得绕过 layer 自动 iframe 插入逻辑,改用手动控制。

用 type: 1 + iframe 手动插入实现可监听的加载流程

核心思路是:不用 type: 2,改用 type: 1,自己创建 <iframe></iframe> 元素,监听其 onload 事件,并在加载中显示遮罩或进度提示。layer 提供了 layer.load() 和 layer.closeLoad() 配合使用。

  • 先调用 layer.load(2) 显示转圈加载图标(2 表示风格)
  • 再用 layer.open({ type: 1, content: '<iframe src="..."></iframe>' }) 打开弹层
  • 在 iframe 的 onload 回调里调用 layer.closeLoad()
  • 注意:iframe 必须同源才能可靠触发 onload;跨域时 onload 可能静默触发或不触发,且无法读取 iframe.contentDocument

示例代码片段:

layer.load(2);
layer.open({
  type: 1,
  title: '加载中...',
  area: ['800px', '600px'],
  content: '<iframe src="https://example.com/page.html" style="width:100%;height:100%;border:none;" onload="layer.closeLoad()"></iframe>'
});

更稳的方式:用 fetch + innerHTML 替代 iframe(适合同源页面)

如果目标 URL 是你自己的同源页面(如 /admin/user/list),推荐不用 iframe,改用 fetch 获取 HTML 片段,再注入到 type: 1 弹层中。这样能完全掌控加载状态,也避免 iframe 样式隔离、脚本执行受限等问题。

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载
  • fetch 成功后,用 response.text() 拿到 HTML 字符串
  • 提取关键内容(比如只取 内部或某个 id="container" 的部分),避免引入重复 CSS/JS
  • 注入前调用 layer.closeLoad(),失败时用 layer.msg('加载失败')
  • 注意:原页面里的相对路径(如 ./css/app.css)会失效,需提前转为绝对路径或服务端处理

为什么不要给 iframe 加 loading="eager" 或用 JS 模拟进度条?

浏览器对 iframe 的加载没有提供类似 XMLHttpRequest.upload.onprogress 的事件;loading="eager" 是预加载提示,不影响渲染行为,也无法触发回调。网上有些方案用定时器 + iframe.contentDocument 判空来“模拟”进度,但既不准又不可靠——尤其在 iframe 还没完成文档解析时,访问 contentDocument 会报错 Access to iframe.contentDocument is denied(跨域)或返回 null(未就绪)。

真正可控的加载反馈,只存在于你发起请求的那一刻(fetch / xhr)和收到响应的那一刻。iframe 是黑盒,layer 不暴露底层实例,强行 hack 容易在 layui 升级后失效。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2443

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5283

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6330

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5898

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

843

5

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

2780

4

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

360

5

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.15

2593

5

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.24

1161

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 12.9万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 11.1万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习