由于业务需求,页面需要使用iframe,并且需要做iframe高度自适应,在获取子页面的元素高度时发生跨域问题,随后看到postMessage事件,在本地调试能够正常监控事件的触发,
这是父页面监控事件的代码

window.addEventListener('message', function (e) {
		console.log(e)
        }, false);

这是子页面的代码

 var height = document.getElementById("页面").offsetHeight;
        window.parent.postMessage({ height: height });

随后更新到正式环境,发现父页面无法监控到事件的触发,随后仔细阅读文档,发现postMessage的参数targetOrigin是控制那些页面能够接收事件,随后加上"*",正式环境就能够正常监控到事件的触发了

由于业务需求,页面需要使用iframe,并且需要做iframe高度自适应,在获取子页面的元素高度时发生跨域问题,随后看到postMessage事件,在本地调试能够正常监控事件的触发,这是父页面监控事件的代码window.addEventListener('message', function (e) { console.log(e) }, false);这是子页面的代码 var height = document.getElementById("页面").offsetHeigh 4.拥有自动维护的socket连接池,减少握手次数; 5.拥有队列线程池,轻松写并发; 6.拥有Interceptors(拦截器),轻松处理请求与响应额外需求(例:请求失败重试、响应内容重定向等等); 图片和部分文字转载自https://www.songyuba <iframe src='../helloWord.html'> <script> window.addEventListener('message',function(e){ //代码 },false); <script> //iframe方式打开子页面 targetWin = window.par
项目中使用到iframeiframe跨域通信需要使用postMessage发送消息,addEventListener接收消息。 原先是获取当前窗口的数据发送过去。 const _iframe = document.getElementById('iframeViewer').contentWindow let _obj = res.data.data _obj.type = 'view' _obj.currentProcessInstanc
网易七鱼是提供围绕客户服务与智能营销的 SaaS 平台。在七鱼业务中,有在线系统、呼叫系统、机器人、工单系统、数据大屏等业务线,它们分布在两个业务端,管理端和客服端。这两个端的功能框架类似,都是由外层框架(顶部导航、一级菜单)及中间的内容区组成。 二、业务现状 随着业务体量的增大与功能的增多,主系统作为一个巨石应用复杂度越来越高,所有的业务线耦合在一起,在系统构建、业务分离、开发维护方面带来了新的挑战。 为解决以上问题,我们最初采用了 「MPA + iframe」 的技术方案。先按业务维度 2,需要注意的地方 3,WM_COPYDATA的原理 SendMessage和PostMessage在Win32编程中是很常见的,主要是用来发送消息到指定的窗口,一般用于工作线程传输数据到UI线程。其中SendMessage函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。
在这种情况下,可以使用JavaScript来动态调整iframe高度,使其与内容高度相匹配。具体实现方法如下: 1. 在父页面中添加一个iframe元素,并设置其src属性为跨域页面的URL。 2. 在父页面中添加一个JavaScript函数,用于获取iframe中内容的高度,并将其设置为iframe高度。 3. 在跨域页面中添加JavaScript代码,用于将内容高度传递给父页面。 4. 在跨域页面中添加一个定时器,用于定期检测内容高度是否发生变化,并将其传递给父页面。 具体实现代码如下: 在父页面中: <iframe id="myFrame" src="https://example.com"></iframe> <script> function resizeFrame() { var frame = document.getElementById("myFrame"); var height = frame.contentWindow.document.body.scrollHeight; frame.style.height = height + "px"; window.onload = function() { resizeFrame(); setInterval(resizeFrame, 100); </script> 在跨域页面中: <script> function sendHeight() { var height = document.body.scrollHeight; parent.postMessage({height: height}, "*"); window.onload = function() { sendHeight(); setInterval(sendHeight, 100); window.addEventListener("resize", sendHeight); </script>