vue與iframe頁面數(shù)據(jù)互相通信的實(shí)現(xiàn)示例
首頁先搭建一個html頁面和vue頁面,在vue頁面中,嵌入我們需要的iframe頁面
1. 搭建 html 頁面和 vue 頁面
暫定為 iframeDemo.html
和 vueDemo.vue
頁面
編寫 iframeDemo.html
頁面(完整代碼)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> html, body { margin: 0; padding: 0; overflow: hidden; } .box { width: 100%; height: 200px; border: 2px solid #000; box-sizing: border-box; } </style> </head> <body> <div class="box"> <button id="sendBtn">我是iframe頁面按鈕</button> </div> </body> </html> <script type="text/javascript"> // iframe頁面點(diǎn)擊發(fā)送按鈕,傳遞事件給vue document.getElementById("sendBtn").addEventListener("click", () => { window.parent.postMessage({ data: { code: "success", test: "我是點(diǎn)擊iframe頁面按鈕后過來的數(shù)據(jù)" } }, '*'); }); // 監(jiān)聽vue頁面?zhèn)鱽淼膍essage事件 window.addEventListener("message", (event) => { const data = event.data if (data.code === 'success') { alert(data.test) } }, false); </script>
編寫 vueDemo.vue
頁面(完整代碼),嵌入 iframeDemo.html
在實(shí)現(xiàn)兩個頁面的互相數(shù)據(jù)通信
<template> <div class="home"> <div class="body"> <iframe src="/iframeDemo.html" ref="iframe" frameborder="0" width="100%" height="4 00px" /> <el-button @click="btnClick">我是vue頁面按鈕</el-button> </div> </div> </template> <script> export default { data() { return {} }, methods: { // 給iframe發(fā)送事件 btnClick() { this.iframeWin.postMessage( { code: 'success', test: '我是點(diǎn)擊vue頁面按鈕后過來的數(shù)據(jù)!', }, '*' ) }, }, mounted() { // 監(jiān)聽iframe頁面點(diǎn)擊按鈕觸發(fā)事件 window.addEventListener('message', (event) => { const data = event.data.data if (data.code === 'success') { alert(data.test) } }) this.iframeWin = this.$refs.iframe.contentWindow }, } </script> <style scoped lang="scss"> .home { .body { width: 890px; height: 100%; border: #ff3366 solid 10px; box-sizing: border-box; box-sizing: border-box; padding: 20px; } } </style>
2. 實(shí)現(xiàn) iframe 向 vue 頁面通信
- 點(diǎn)擊iframe頁面,通過
window.parent.postMessage
傳遞數(shù)據(jù)到vue頁面- vue頁面,通過
window.addEventListener('message')
去接收iframe傳遞過來的數(shù)據(jù)
- 實(shí)現(xiàn)效果如下(點(diǎn)擊iframe頁面的按鈕事件,在vue頁面中監(jiān)聽并彈窗提示)
- 在
iframeDemo.html
中新建按鈕的點(diǎn)擊事件
<button id="sendBtn">我是iframe頁面按鈕</button>
<script type="text/javascript"> // iframe頁面點(diǎn)擊發(fā)送按鈕,傳遞事件給vue document.getElementById("sendBtn").addEventListener("click", ()=> { window.parent.postMessage({ data: { code:"success", test:"我是點(diǎn)擊iframe頁面按鈕后過來的數(shù)據(jù)" } }, '*'); }); </script>
- 在
vueDemo.vue
頁面的mounted
中監(jiān)聽iframe頁面?zhèn)鬟^來的message
事件
mounted() { // 監(jiān)聽iframe頁面點(diǎn)擊按鈕觸發(fā)事件 window.addEventListener('message', (event) => { const data = event.data.data if (data.code === 'success') { alert(data.test) } }) },
3. 在實(shí)現(xiàn) vue 向 iframe 頁面通信
- 點(diǎn)擊vue頁面,通過
postMessage
傳遞數(shù)據(jù)到iframe頁面- iframe頁面,通過
window.addEventListener('message')
去接收vue傳遞過來的數(shù)據(jù)
實(shí)現(xiàn)效果如下(點(diǎn)擊vue頁面的按鈕事件,在iframe頁面中監(jiān)聽并彈窗提示)
- 在
vueDemo.html
中新建按鈕的點(diǎn)擊事件
<el-button @click="btnClick">我是vue頁面按鈕</el-button>
methods: { // vue頁面點(diǎn)擊發(fā)送按鈕,傳遞事件給vue btnClick() { this.iframeWin.postMessage( { code: 'success', test: '我是點(diǎn)擊vue頁面按鈕后過來的數(shù)據(jù)', }, '*' ) }, },
- 在
iframeDemo.vue
頁面的mounted
中監(jiān)聽iframe頁面?zhèn)鬟^來的message
事件
// 監(jiān)聽vue頁面?zhèn)鱽淼膍essage事件 window.addEventListener("message", (event) => { const data = event.data if (data.code === 'success') { alert(data.test) } }, false);
以上就是vue與iframe頁面數(shù)據(jù)互相通信的實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于vue與iframe頁面數(shù)據(jù)通信的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue?element-plus圖片預(yù)覽實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于vue?element-plus圖片預(yù)覽實(shí)現(xiàn)的相關(guān)資料,最近的項(xiàng)目中有圖片預(yù)覽的場景,也是踩了一些坑,在這里總結(jié)一下,需要的朋友可以參考下2023-07-07查找Vue中下標(biāo)的操作(some和findindex)
這篇文章主要介紹了查找Vue中下標(biāo)的操作(some和findindex),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Vue實(shí)用功能之實(shí)現(xiàn)拖拽元素、列表拖拽排序
在日常開發(fā)中,特別是管理端,經(jīng)常會遇到要實(shí)現(xiàn)拖拽排序的效果,下面這篇文章主要給大家介紹了關(guān)于Vue實(shí)用功能之實(shí)現(xiàn)拖拽元素、列表拖拽排序的相關(guān)資料,需要的朋友可以參考下2022-10-10vue-cli3項(xiàng)目在IE瀏覽器打開兼容問題及解決
這篇文章主要介紹了vue-cli3項(xiàng)目在IE瀏覽器打開兼容問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08Vue3中的defineExpose函數(shù)用法深入解析
這篇文章主要介紹了Vue3中的defineExpose函數(shù)用法的相關(guān)資料,defineExpose是Vue3中用于在模式下暴露組件內(nèi)部屬性和方法的輔助函數(shù),它允許父組件通過ref訪問子組件的暴露內(nèi)容,提高組件間的交互能力并保持封裝性,需要的朋友可以參考下2025-01-01