vue项目嵌套iframe实现发送、接收数据
vue嵌套iframe发送、接收数据
<template> <div class="home"> <iframe src="http://127.0.0.1:8888/index.html" class="mapFrame" ref="mapFrame"></iframe> </div> </template>
<script>
export default {
mounted() {
let mapFrame = this.$refs['mapFrame']
if (mapFrame.attachEvent){ //兼容浏览器判断
mapFrame.attachEvent("onload", function(){
let iframeWin = mapFrame.contentWindow
iframeWin.postMessage({
method: 'getBaseInfo',
data:'我是vuex state的数据'
},'*')
})
} else {
mapFrame.onload = function(){
let iframeWin = mapFrame.contentWindow
iframeWin.postMessage({
method: 'getBaseInfo',
data:'我是vuex state的数据'
},'*')
}
}
}
}
</script><style scoped lang="stylus">
.home {
.mapFrame {
height: 300px;
width: 500px;
}
}
</style>子页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>iframe嵌套网页测试</title>
</head>
<body>
<script>
window.addEventListener('message',function(e){
console.log('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
console.log(e.origin,e.data)
})
// window.postMessage({
// method:'localtest',
// data:'ddddddddddddddddddddddddddddd'
// },'*')
</script>
</body>
</html>vue中iframe的使用
iframe在同域时能自由操作iframe和父框架的内容(DOM),在跨域时可以实现页面跳转。
<iframe id="iframe" :src="iframeSrc" style="height: calc(100% - 50px)" width="100%" frameborder="0"></iframe>
获取iframe里面的内容
iframe.contentWindow, 获取iframe的window对象iframe.contentDocument, 获取iframe的document对象
const _iframe = document.getElementById('iframe').contentWindowCDM跨域
如果你设置的iframe的域名和你top window的域名完全不同,可以使用CDM(cross document messaging)进行跨域消息的传递。
发送消息: 使用postmessage方法
postMessage(message, targetOrigin)
message: 传递给iframe的内容, 通常是string,最好不要传object对象,需要传对象时,使用JSON.stringfy转换。targetOrigin: 接受你传递消息的域名,可以设置绝对路径,也可以设置""或者"/"。 表示任意域名都行,"/"表示只能传递给同域域名。
_iframe.postMessage(JSON.stringify(_obj), '*')
接受消息: 监听message事件
当targetOrigin接受到message消息之后,会触发message事件。 message提供的event对象上有3个重要的属性,data,origin,source.
window.addEventListener('message', function (event) {
console.log(event)
if (event.origin === window.callBackUrl.iframeSrc) {
_this.childData = event.data
console.log(event.data)
_this.saveForm()
}
})以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Vant中List组件immediate-check=false无效的解决
这篇文章主要介绍了Vant中List组件immediate-check=false无效的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-01-01
如何解决sass-loader和node-sass版本冲突的问题
这篇文章主要介绍了如何解决sass-loader和node-sass版本冲突的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-04-04
vue-seamless-scroll无缝滚动组件使用方法详解
这篇文章主要为大家详细介绍了vue-seamless-scroll无缝滚动组件的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-04-04
关于Elementui中toggleRowSelection()方法实现分页切换时记录之前选中的状态
这篇文章主要介绍了关于Elementui中toggleRowSelection()方法实现分页切换时记录之前选中的状态,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-03-03


最新评论