业务背景:
由于客户工作需要,提出需求,要在其他业务系统内内嵌本系统页面,让业务系统的系统用户成为本系统客户,并以客户身份处理业务。
方案:
父页面(业务系统页面)
子页面(本系统页面)
业务系统新建页面A,A里面有个 iframe ,将本系统页面B嵌入iframe,传递参数加签,后台验签。
A:
<iframe style="border:0px;width:100%;height:100%;display: block; border: 1px dashed #ccc; height: 800px;" src="http:xx.xx.xx/xxx.html" id="child"></iframe>
<script>
window.onload=function () {
window.frames[0].postMessage(JSON.stringify(obj), 'http:xx.xx.xx/');
window.addEventListener('message', function(messageEvent) {
var data = messageEvent.data;
console.info('message from child:', data);
}, false);
};
</script>
B:
<body onload="touch_audio();"></body>
<script>
function touch_audio(){
window.addEventListener('message', function(ev) {
var data = ev.data;
console.log(data)
}
}
}, false);
}
</script>
子页面中window.addEventListener()中 ev参数可以拿请求的父页面的ip地址,后台根据ip地址做个密钥管理,前台获取到数据后,将数据和ip地址传到后台,后台根据ip地址查找密钥,用密钥解密后,将业务系统的编号与请求地址对应的业务系统编号做对比,以确定是否为已对接平台的客户。
遇到过的问题:
获取到的数据乱码——业务平台页面编码改成 utf-8。
校验事件传参为空(加载顺序原因)——给body标签加上加载方法,强制优先加载 window.addEventListener。
后期需求要求自定义iframe内嵌页面路径,经过尝试发现,改变iframe默认路径后,addListener会报错(“iframe访问路径与默认访问路径不一致”),当iframe的路径为 # 或 空 时,浏览器会默认为当前域名,后面用js动态修改路径后,会出现问题,目前还没有找到解决方式。
版权声明:本文为qq_38734891原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。