由于业务需求,页面需要使用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
项目中使用到iframe,iframe跨域通信需要使用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>