vue 内嵌外部页面

  1. 参考:https://blog.csdn.net/weixin_43957384/article/details/131111544

Plan

  1. Embed an HTML page in Vue:

    • Use an iframe to embed the external HTML page within a Vue component.
  2. Communicate between Vue and the embedded HTML page:

    • Use postMessage API for communication between the parent Vue component and the embedded HTML page.

Vue Component

  1. Create a Vue component that includes an iframe to embed the external HTML page.
  2. Set up event listeners to handle messages from the embedded HTML page.
  3. Use postMessage to send messages to the embedded HTML page.

Embedded HTML Page

  1. Set up event listeners to handle messages from the parent Vue component.
  2. Use postMessage to send messages to the parent Vue component.

Code

Vue Component (MyComponent.vue)

<template>
<div>
<iframe ref="iframe" src="path/to/embedded.html" @load="onIframeLoad"></iframe>
</div>
</template>
<script>
export default {
methods: {
onIframeLoad() {
const iframe = this.$refs.iframe.contentWindow;
// Listen for messages from the embedded HTML page
window.addEventListener('message', this.handleMessageFromIframe);
// Send a message to the embedded HTML page
iframe.postMessage({ type: 'INIT', data: 'Hello from Vue' }, '*');
},
handleMessageFromIframe(event) {
if (event.origin !== 'expected-origin') return; // Validate the origin
const { type, data } = event.data;
if (type === 'RESPONSE') {
console.log('Message from iframe:', data);
}
},
},
beforeDestroy() {
window.removeEventListener('message', this.handleMessageFromIframe);
},
};
</script>

Embedded HTML Page (embedded.html)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Embedded Page</title>
</head>
<body>
<script>
// Listen for messages from the parent Vue component
window.addEventListener('message', function(event) {
if (event.origin !== 'expected-origin') return; // Validate the origin
const { type, data } = event.data;
if (type === 'INIT') {
console.log('Message from parent:', data);
// Send a response back to the parent Vue component
event.source.postMessage({ type: 'RESPONSE', data: 'Hello from embedded page' }, event.origin);
}
});
</script>
</body>
</html>

Summary

  • Use an iframe to embed the HTML page in the Vue component.
  • Use postMessage API for communication between the parent Vue component and the embedded HTML page.
  • Ensure to validate the origin of messages for security.

posted on   朝朝暮Mu  阅读(48)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示