最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、前言

什么是iframe?

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

什么是postMessage?

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

二、應(yīng)用場(chǎng)景

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

2.1 嵌入頁(yè)面

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

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

data中定義src引入端口號(hào)為8081的頁(yè)面:

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

那么問(wèn)題就來(lái)了,嵌入的登錄模塊屬于子頁(yè)面(另一個(gè)項(xiàng)目,端口號(hào)8081)的東西,如何能讓我自己的頁(yè)面知道用戶(hù)點(diǎn)擊了藍(lán)色按鈕,達(dá)到登錄后隱藏登錄框的效果呢?在這里,postMessage就派上了用場(chǎng)。

2.2 postMessage 實(shí)現(xiàn)父子頁(yè)面通信

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

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

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

目標(biāo)源寫(xiě)成 * ,具備了兩個(gè)必要參數(shù),我們就可以開(kāi)始使用postMessage了。

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

在這個(gè)項(xiàng)目中,我需要在點(diǎn)擊login按鈕(子頁(yè)面),并且登陸成功后在父頁(yè)面中隱藏登錄模塊。

父頁(yè)面如何才能知道用戶(hù)點(diǎn)擊了子頁(yè)面按鈕?

postMessage只是一個(gè)溝通的橋梁。

子頁(yè)面說(shuō)話(huà),父頁(yè)面需要聽(tīng)到。所以我們?cè)诟疙?yè)面的mounted函數(shù)中寫(xiě)一個(gè)監(jiān)聽(tīng)。

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

下面為完整代碼

子頁(yè)面代碼:

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

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

父頁(yè)面代碼:

<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父頁(yè)面代碼:

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

子頁(yè)面監(jiān)聽(tīng)同理。

三、拓展閱讀

postMessage的兩種使用方式

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

相關(guān)文章

  • vue3項(xiàng)目啟動(dòng)自動(dòng)打開(kāi)瀏覽器以及server配置過(guò)程

    vue3項(xiàng)目啟動(dòng)自動(dòng)打開(kāi)瀏覽器以及server配置過(guò)程

    這篇文章主要介紹了vue3項(xiàng)目啟動(dòng)自動(dòng)打開(kāi)瀏覽器以及server配置過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue+vant 上傳圖片需要注意的地方

    vue+vant 上傳圖片需要注意的地方

    這篇文章主要介紹了vue+vant 上傳圖片需要注意的地方,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2021-01-01
  • Vue中使用v-print打印出現(xiàn)空白頁(yè)問(wèn)題及解決

    Vue中使用v-print打印出現(xiàn)空白頁(yè)問(wèn)題及解決

    這篇文章主要介紹了Vue中使用v-print打印出現(xiàn)空白頁(yè)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • vue中如何給靜態(tài)資源增加路由前綴

    vue中如何給靜態(tài)資源增加路由前綴

    這篇文章主要介紹了vue中如何給靜態(tài)資源增加路由前綴,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 詳解Vue3頁(yè)面如何自適應(yīng)表格滾動(dòng)高度

    詳解Vue3頁(yè)面如何自適應(yīng)表格滾動(dòng)高度

    這篇文章主要為大家詳細(xì)介紹了Vue3頁(yè)面如何自適應(yīng)表格滾動(dòng)高度,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • 詳解vue在項(xiàng)目中使用百度地圖

    詳解vue在項(xiàng)目中使用百度地圖

    這篇文章主要介紹了vue在項(xiàng)目中使用百度地圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 基于vue-cli配置lib-flexible + rem實(shí)現(xiàn)移動(dòng)端自適應(yīng)

    基于vue-cli配置lib-flexible + rem實(shí)現(xiàn)移動(dòng)端自適應(yīng)

    這篇文章主要介紹了基于vue-cli配置lib-flexible + rem實(shí)現(xiàn)移動(dòng)端自適應(yīng),需要的朋友可以參考下
    2017-12-12
  • 解決修改el-pagination顯示文字的問(wèn)題

    解決修改el-pagination顯示文字的問(wèn)題

    這篇文章主要介紹了解決修改el-pagination顯示文字的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue中使用路由改瀏覽器標(biāo)題和圖標(biāo)

    vue中使用路由改瀏覽器標(biāo)題和圖標(biāo)

    這篇文章主要介紹了vue中使用路由改瀏覽器標(biāo)題和圖標(biāo),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue六大基本類(lèi)型中的原始值響應(yīng)式

    Vue六大基本類(lèi)型中的原始值響應(yīng)式

    原始值指的是 Boolean、Number、BigInt、String、Symbol、undefined、null 等類(lèi)型的值,在 JavaScript 中,原始值是按值傳遞的,引用類(lèi)型是按引用傳遞的,這意味著,如果一個(gè)函數(shù)接收了一個(gè)原始值作為參數(shù),那么形參和實(shí)參之間是沒(méi)有引用關(guān)系的,它們是完全獨(dú)立的兩個(gè)值
    2023-01-01

最新評(píng)論

内黄县| 贵阳市| 建宁县| 民乐县| 新源县| 斗六市| 中卫市| 阿拉善盟| 安福县| 潮州市| 五寨县| 南通市| 饶阳县| 合作市| 绥德县| 商丘市| 建始县| 新化县| 赣榆县| 弥渡县| 柘荣县| 旬邑县| 梧州市| 谷城县| 徐州市| 博乐市| 天等县| 阳江市| 邵阳市| 樟树市| 开远市| 彰化市| 文水县| 南安市| 澎湖县| 广灵县| 莒南县| 长白| 瑞金市| 武冈市| 安龙县|