js 监视 iframe 或 frameset 的内容变动(文盲第二版)

2024-02-25 20:48

本文主要是介绍js 监视 iframe 或 frameset 的内容变动(文盲第二版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前写了一个js 监视 iframe 或 frameset 的内容变动,结果有人留言了,然后仔细一看,代码通用性好差,当时自己的项目能用了,就没再继续研究了

今天经过一番调试,弄出来了下边这个效果,估计大家应该都能用起来了

文件:test_iframe_400.html

<!doctype html>
<html lang="en"><head><meta charset="UTF-8"><meta name="Generator" content="EditPlus®"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Description" content=""><title>Document</title></head><body><a href="test_iframe_100.html">100</a><a href="test_iframe_800.html">800</a><div style="height:400px;width:100%;">400</div></body>
</html>

文件:test_iframe_100.html

<!doctype html>
<html lang="en"><head><meta charset="UTF-8"><meta name="Generator" content="EditPlus®"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Description" content=""><title>Document</title></head><body><a href="test_iframe_400.html">400</a><a href="test_iframe_800.html">800</a><div style="height:100px;width:100%;">100</div></body>
</html>

文件:test_iframe_800.html

<!doctype html>
<html lang="en"><head><meta charset="UTF-8"><meta name="Generator" content="EditPlus®"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Description" content=""><title>Document</title></head><body><a href="test_iframe_100.html">100</a><a href="test_iframe_400.html">400</a><div style="height:800px;width:100%;">800</div></body>
</html>
先定义了三个iframe需要嵌套的文件,页面内互相链接其他内容
然后,开始实现监控iframe

文件:test_iframe.html

<!doctype html>
<html lang="en"><head><meta charset="UTF-8"><meta name="Generator" content="EditPlus®"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Description" content=""><title>Document</title><script type="text/javascript" src="http://static.caigou.com.cn/js/jquery-1.8.0.min.js"></script></head><body><div><form><input type="radio" value="test_iframe_100.html" name="url" /> 100高<input type="radio" value="test_iframe_400.html" name="url" /> 400高<input type="radio" value="test_iframe_800.html" name="url" /> 800高<br/><input type="radio" value="a" name="target" /> a窗口<input type="radio" value="b" name="target" /> b窗口<br/><input type="button" value="跳转" /></form></div><br/><br/><iframe src="test_iframe_100.html" name="a"></iframe><iframe src="test_iframe_400.html" name="b"></iframe><script>$(document).ready(function(){$('iframe').each(function(){var loaded = function(){console.log(this.location.href + ' is loading')var sn = 0;for(var i =0;i<frames.length;i++){if (frames[i]==this){sn=i;break;}}$('iframe').each(function(){if (this.contentWindow==frames[sn]){var ifr = $(this);$(this.contentDocument).ready(function(){console.log(frames[sn].location.href + ' is loaded')console.log(frames[sn].document.body.clientHeight)ifr.css({height:frames[sn].document.body.clientHeight+'px'})})}});}var unloaded = function(){var sn = 0;for(var i =0;i<frames.length;i++){if (frames[i]==this){sn=i;break;}}setTimeout(function(){frames[sn].onload = loaded;frames[sn].onunload = unloaded},0); // 哪怕是立刻执行该闭包,当前线程也已释放,frames中的对象已重构,所以执行到闭包内部时,frames重新定义加载事件}this.contentWindow.onload = loaded;this.contentWindow.onunload = unloaded;});});  </script></body>
</html>

好了,功能完成,包括url变动监听,url加载完成后宽高变动

这个监控其实很简单,那就是对window对象frames进行监控,当页面具有frameset和iframe时,frames中就具有了对应的子窗口

然后,对事件进行绑定,当window加载成功时,会触发onload事件,那么直接绑定就好

再然后,当页面地址发生变动时,可以触发window.onunload事件,但是已绑定的onload事件不好使了

然后,我们在触发onunload事件的线程外重新获取frames,并对相应的子窗口重新进行事件绑定,因为你页面地址一变动,frames就重构了

最后,再对文档加载完毕时进行监听,再最后,完成自己需要完成的功能即可

注意:对于跨域的页面引用,这个js不太适用,跨域问题如果谁解决了,请在本文后留言,文盲也想学习一下

这篇关于js 监视 iframe 或 frameset 的内容变动(文盲第二版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/746660

相关文章

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工