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

相关文章

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工

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开