使用iframe跨域通信【Window postMessage 方法】
最编程
2024-01-31 13:28:57
...
<template>
<iframe id="iframe" ref="iframe" :src="uri" frameborder="0" scrolling="auto">
</iframe>
</template>
<script>
export default {
data() {
return {
drawerLoading:false,
uri:"http://10.54.49.149:80/iframe/itsm",
};
},
created() {
//给子窗口发送参数
this.postMessage()
//接收子窗口传递的参数
this.getMessage();
},
mounted() {
},
methods: {
//给子窗口发送信息
postMessage(row) {
/**
* iframe加载子窗口完成时通过postMessage传递数据
*/
this.drawerLoading = true;
this.$nextTick(() => {
let mapFrame = this.$refs["iframe"];
mapFrame.onload = () => {
this.drawerLoading = false;
let iframeWin = mapFrame.contentWindow;
iframeWin.postMessage(
{//给子窗口传递的参数
code: "itsm",
params: {
documentId: "",
modelId: "3",
instanceSelectAbled: true,
},
},
this.uri //给哪个域名下的子窗口发送【可改为 *,即通配】
);
};
});
},
//接收子窗口传递的参数
getMessage() {
window.onmessage = this.handleMessage;
// window.addEventListener("message", this.handleMessage);
},
handleMessage(event) {
let data = event.data;
if (data && data.code) {
if (data.params.method === "cancel") {
//取消
} else {
//确认、删除
if (data.params.res.code !== "S1A00000") {
return this.$message.error(data.params.res.msg);
}
this.$message({
message: data.params.res.msg,
type: "success",
});
}
} else {
}
},
},
};
</script>
<style >
#iframe {
width: 100%;
height: 100%;
overflow: auto;
}
</style>
<iframe id="iframe" ref="iframe" :src="uri" frameborder="0" scrolling="auto">
</iframe>
</template>
<script>
export default {
data() {
return {
drawerLoading:false,
uri:"http://10.54.49.149:80/iframe/itsm",
};
},
created() {
//给子窗口发送参数
this.postMessage()
//接收子窗口传递的参数
this.getMessage();
},
mounted() {
},
methods: {
//给子窗口发送信息
postMessage(row) {
/**
* iframe加载子窗口完成时通过postMessage传递数据
*/
this.drawerLoading = true;
this.$nextTick(() => {
let mapFrame = this.$refs["iframe"];
mapFrame.onload = () => {
this.drawerLoading = false;
let iframeWin = mapFrame.contentWindow;
iframeWin.postMessage(
{//给子窗口传递的参数
code: "itsm",
params: {
documentId: "",
modelId: "3",
instanceSelectAbled: true,
},
},
this.uri //给哪个域名下的子窗口发送【可改为 *,即通配】
);
};
});
},
//接收子窗口传递的参数
getMessage() {
window.onmessage = this.handleMessage;
// window.addEventListener("message", this.handleMessage);
},
handleMessage(event) {
let data = event.data;
if (data && data.code) {
if (data.params.method === "cancel") {
//取消
} else {
//确认、删除
if (data.params.res.code !== "S1A00000") {
return this.$message.error(data.params.res.msg);
}
this.$message({
message: data.params.res.msg,
type: "success",
});
}
} else {
}
},
},
};
</script>
<style >
#iframe {
width: 100%;
height: 100%;
overflow: auto;
}
</style>
推荐阅读
-
iframe 跨域通信(postMessage)
-
使用window.postMessage进行iframe间的通信
-
在页面中使用iframe实现跨域通信的方法
-
iframe跨域通信(postMessage)
-
搞定iframe跨域通信问题的万能方法!第二部分(终极版)
-
使用postMessage在不同iframe间跨域传递消息
-
Vue高级技巧(86):利用window.postMessage实现跨域数据传输与iframe的结合
-
使用iframe跨域通信【Window postMessage 方法】
-
用通用Iframe进行跨域通信的库实现方法
-
window.postMessage实现跨域通信和页面间数据通信