热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iframe加载完成的事件监听及双滚动条问题的解决方案

在使用iframe嵌入外部页面时,经常会遇到页面加载不同步的问题。当嵌入的页面响应较慢时,这种异步加载会导致用户体验不佳。本文介绍了如何通过监听iframe加载完成的事件来解决这一问题,并提出了针对双滚动条问题的有效解决方案,以提升整体的用户体验和页面加载效率。

经常会遇到这样一种情景:
在iframe里嵌入另外一个页面时。如果iframe载入的页面响应较快,或许我们感觉不到页面载入的不同步,但试想,如果一个需要内嵌到iframe里的页面的响应很慢,这里会出现一种什么现象呢?这时将会出现所有页面已经载入完成,但在iframe元素处,将会出现空白,直到内嵌页面完成载入时,该空白处才会显示新载入的页面。

可想而知,一个页面如果长时间的空白,对于浏览者来说将意味着什么。
如果在内嵌页面未载入完成时,给出一种加载提示信息。如:“页面加载中”之类的,我想这对浏览页面用户来讲,将不再是煎熬,更是一种视觉上的享受。

为了实现这样的效果,一般会采用如下原理处理。

  • iframe载入区域给出友好的提示信息
  • 当iframe载入完成时,清空提示信息,而让iframe显示

这些都比较容易,但现在的问题的关键是怎么监听iframe元素内的页面已经载入完成。
关键这个问题,一般来讲,会分两种情况的来讨论解决方案。

  • 同域的嵌套。最好是让子页面调用父页面的方法
  • 如果是异域,但子页面无法修改,那么:在Firefox/Opera/Safari中,可以直接使用iframe onload事件;而在IE中,可以通过定时器测定子页面的document.readyState,或者使用iframe onreadystatechange事件计算该事件的响应

同域嵌套

parent.html
function ifrmLoaded() {
// code here
}
sub.html
window.Onload= function() {
window.parent.ifrmLoaded();
}

嵌套页面不能修改,或者异域嵌套

  • Firefox/Opera/Safari中直接使用iframe onload事件

document.getElementById('ifrm').Onload= function() {
//here doc
}

  • 在IE下,注册iframe onreadystatechange事件

var oFrm = document.getElementById('ifrm');
oFrm.Onreadystatechange= function() {
if (this.readyState && this.readyState == 'complete') {
onComplete();
}
}

兼容Firefox/Opera/Safari/IE的处理方式

var oFrm = document.getElementById('ifrm');
oFrm.Onload= oFrm.Onreadystatechange= function() {
if (this.readyState && this.readyState != 'complete') return;
else {
onComplete();
}
}

双滚动条问题

因为iframe默认是inline-block元素,空白符被解析,所以无端端出现滚动条
使用iframe时,一般会出现双滚动条问题,解决方案如下:
1、修改元素的类型为display:block;
2、修改父级样式,如font-size: 0; 或者line-height:0;
3、修改元素的样式vertical-align:middle;

http://hqlong.com/2009/02/620…


推荐阅读
  • 使用原生 AJAX 处理文件下载与 IE 浏览器图片显示问题
    本文探讨了如何利用原生 AJAX 实现文件的 POST 或 GET 请求下载,并监控下载状态。同时,针对 IE 浏览器及部分移动设备浏览器因路径问题导致图片无法正常显示的情况,提供了有效的解决方案。 ... [详细]
  • 本文基于作者使用Flask框架处理后端逻辑和原生JavaScript及jQuery进行前端开发的经验,详细介绍了如何在前后端之间高效地传输JSON数据。文章不仅涵盖了技术实现细节,还提供了实用的代码示例。 ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 右下角动态通知实现
    本文介绍如何在网页中实现右下角滑动通知的功能,包括前后台代码示例及具体实现步骤。 ... [详细]
  • 本文介绍了如何通过安装和配置php_uploadprogress扩展来实现文件上传时的进度条显示功能。通过一个简单的示例,详细解释了从安装扩展到编写具体代码的全过程。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
  • 本文详细介绍如何使用 HTML5 和 JavaScript 实现一个交互式的画板功能。通过具体代码示例,帮助读者理解 Canvas API 的基本用法及其在绘图应用中的实际应用。 ... [详细]
  • 本文介绍如何使用Python编写一个简单的爬虫程序,从知乎问题页面抓取美腿图片。环境配置包括Windows 10操作系统,Python语言及其相关库。 ... [详细]
  • 1.选择一个翻译页面,我选择的是有道词典(http:dict.youdao.com)2.随便输入一个英语单词进行翻译,然后查看源文件,找到 ... [详细]
  • 探讨了使用 JavaScript IIFE(立即执行函数表达式)动态加载 YouTube 脚本时遇到的问题,并提供了可能的解决方案。 ... [详细]
  • 本文详细介绍了跨站脚本攻击(XSS)的基本概念、工作原理,并通过实际案例演示如何构建XSS漏洞的测试环境,以及探讨了XSS攻击的不同形式和防御策略。 ... [详细]
author-avatar
sprite_77
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有