欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue中iframe?結合?window.postMessage?實現(xiàn)跨域通信

 更新時間:2022年12月31日 09:51:50   作者:No?Silver?Bullet  
window.postMessage()?方法可以安全地實現(xiàn)跨源通信,在一個項目的頁面中嵌入另一個項目的頁面,需要實現(xiàn)父子,子父頁面的通信,對Vue中iframe?結合?window.postMessage?實現(xiàn)跨域通信相關知識感興趣的朋友跟隨小編一起看看吧

一、前言

什么是iframe?

iframe 元素會創(chuàng)建包含另外一個文檔的內聯(lián)框架(即行內框架)。

什么是postMessage?

window.postMessage() 方法可以安全地實現(xiàn)跨源通信。通常,對于兩個不同頁面的腳本,只有當執(zhí)行它們的頁面位于具有相同協(xié)議(通常為https),端口號(443https的默認值),以及主機 (兩個頁面的模數(shù) Document.domain設置為相同值) 時,這兩個腳本才能相互通信。window.postMessage() 方法提供了一種受控機制來規(guī)避此限制,只要正確的使用,這種方法就很安全。

二、應用場景

在一個項目的頁面中嵌入另一個項目的頁面,需要實現(xiàn)父子,子父頁面的通信。

2.1 嵌入頁面

iframe使用如下(端口為8080):

<iframe id="myframe" name="myframe" :src="src" ref="iframe" scrolling="no" width="350px" height="350px" frameborder="0"></iframe>

data中定義src引入端口號為8081的頁面:

src:"http://127.0.0.1:8081/#/Login",

那么問題就來了,嵌入的登錄模塊屬于子頁面(另一個項目,端口號8081)的東西,如何能讓我自己的頁面知道用戶點擊了藍色按鈕,達到登錄后隱藏登錄框的效果呢?在這里,postMessage就派上了用場。

2.2 postMessage 實現(xiàn)父子頁面通信

window.postMessage中的windowiframe中是指什么呢?

我們首先要獲取到iframecontentWindow屬性放到mounted鉤子函數(shù)中。

mounted() {
  this.iframeWin = this.$refs.iframe.contentWindow;
},

目標源寫成 * ,具備了兩個必要參數(shù),我們就可以開始使用postMessage了。

2.3 子頁面向父頁面?zhèn)髦?/h3>

在這個項目中,我需要在點擊login按鈕(子頁面),并且登陸成功后在父頁面中隱藏登錄模塊。

父頁面如何才能知道用戶點擊了子頁面按鈕?

postMessage只是一個溝通的橋梁。

子頁面說話,父頁面需要聽到。所以我們在父頁面的mounted函數(shù)中寫一個監(jiān)聽。

mounted() {
    window.addEventListener('message', this.handleMessage);
    this.iframeWin = this.$refs.iframe.contentWindow;
},

下面為完整代碼

子頁面代碼:

 submit() {
   // 向父vue頁面發(fā)送信息
   window.parent.postMessage({
     data: {
       code:"success",
       test:"我是子頁面的test!"
     }
   }, '*');
 }

 submit() {
   // 向父vue頁面發(fā)送信息
   window.parent.postMessage({
     data: {
       code:"success",
       test:"我是子頁面的test!"
     }
   }, '*');
 }

父頁面代碼:

<div class="login" v-if="!loginStatus">
   <iframe id="myframe" name="myframe" :src="src" ref="iframe" scrolling="no" width="350px" height="350px"  frameborder="0"></iframe>
</div>
 methods: {
     handleMessage (event) {
       const data = event.data.data
        if(data.code === "success"){
            alert(data.test)
        }
     }
}

mounted() {
    window.addEventListener('message', this.handleMessage);
    this.iframeWin = this.$refs.iframe.contentWindow;
},

2.4父頁面代碼:

sendMessage () {
   // 外部vue向iframe內部傳數(shù)據
   this.iframeWin.postMessage({
   cmd: 'success',
   data: "我是來自父頁面的data!"
}, '*')

子頁面監(jiān)聽同理。

三、拓展閱讀

postMessage的兩種使用方式

到此這篇關于Vue中iframe 結合 window.postMessage 實現(xiàn)跨域通信的文章就介紹到這了,更多相關vue iframe 跨域通信內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用Vue-Router 2實現(xiàn)路由功能實例詳解

    使用Vue-Router 2實現(xiàn)路由功能實例詳解

    vue-router 2只適用于Vue2.x版本,下面我們是基于vue2.0講的如何使用vue-router 2實現(xiàn)路由功能,需要的朋友可以參考下
    2017-11-11
  • 基于vue2.0+vuex+localStorage開發(fā)的本地記事本示例

    基于vue2.0+vuex+localStorage開發(fā)的本地記事本示例

    這篇文章主要介紹了基于vue2.0+vuex+localStorage開發(fā)的本地記事本示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • vue axios請求頻繁時取消上一次請求的方法

    vue axios請求頻繁時取消上一次請求的方法

    這篇文章主要介紹了vue axios請求頻繁時取消上一次請求的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Vue.js每天必學之數(shù)據雙向綁定

    Vue.js每天必學之數(shù)據雙向綁定

    Vue.js每天必學之數(shù)據雙向綁定,如何進行綁定,如何進行數(shù)據雙向綁定,感興趣的小伙伴們可以參考一下
    2016-09-09
  • vue項目添加多頁面配置的步驟詳解

    vue項目添加多頁面配置的步驟詳解

    公司使用 vue-cli 創(chuàng)建的 vue項目 在初始化時并沒有做多頁面配置,隨著需求的不斷增加,發(fā)現(xiàn)有必要使用多頁面配置。這篇文章主要介紹了vue項目添加多頁面配置,需要的朋友可以參考下
    2019-05-05
  • Vue中$root的使用方法及注意事項

    Vue中$root的使用方法及注意事項

    這篇文章主要給大家介紹了關于Vue中$root使用方法及注意事項的相關資料,vue中$root是用來訪問根組件的,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • vue配置多代理服務接口地址操作

    vue配置多代理服務接口地址操作

    這篇文章主要介紹了vue配置多代理服務接口地址操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue 路由懶加載中給 Webpack Chunks 命名的方法

    vue 路由懶加載中給 Webpack Chunks 命名的方法

    這篇文章主要介紹了在 vue 路由懶加載中給 Webpack Chunks 命名的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • keep-alive include和exclude無效問題及解決

    keep-alive include和exclude無效問題及解決

    這篇文章主要介紹了keep-alive include和exclude無效問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • vue之將echart封裝為組件

    vue之將echart封裝為組件

    這篇文章主要介紹了vue之將echart封裝為組件,本文將會以雷達圖為案例,一步步講解在vue項目中如何使用echart,如何將其封裝為能重復調用的組件
    2018-06-06

最新評論