亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue之組件和iframe頁(yè)面的相互傳參問(wèn)題

 更新時(shí)間:2025年06月12日 09:08:56   作者:阿飛920  
這篇文章主要介紹了vue之組件和iframe頁(yè)面的相互傳參問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

目前網(wǎng)上大多關(guān)于iframe父子傳參的博客都是在敘述父頁(yè)面是html文件,子iframe文件也是html文件,涉及到父頁(yè)面是vue組件子iframe頁(yè)面是html的博客多數(shù)講的不是很明白;而最近我在項(xiàng)目中碰到了這種需求:在vue組件中嵌入iframe頁(yè)面,并實(shí)現(xiàn)父子傳參;

1.vue組件調(diào)用iframe頁(yè)面方法和參數(shù)

(1-1)下面是在 vue組件中(父組件) 一個(gè)通過(guò)點(diǎn)擊按鈕觸發(fā)的方法:

 sentToIframe() {
      let childFrameObj = document.getElementById("unityiframe");
      console.log("childFrameObj", childFrameObj);
      // childFrameObj.contentWindow.getMessageFromParent(this.tData); //第一種向子iFrame傳參方式,調(diào)用iframe的methods達(dá)到傳參的目的
      this.$refs.unity.contentWindow.getMessageFromParent(this.tData); // 這樣也是可以調(diào)用子iframe的方法
      // childFrameObj.contentWindow.frameData = "這是vue組件給你的參數(shù)!" // 傳參成功
      this.$refs.unity.contentWindow.frameData =
        "這是vue組件給你的第二個(gè)參數(shù)!"; //傳參成功
      console.log("發(fā)送完成");

      //此外,還可以通過(guò)DOM操作,操作子iframe的DOM
      var t = document
        .getElementById("unityiframe")
        .contentWindow.document.getElementById("dd");
      console.log(t);
      //
      console.log("frameData?", unityiframe.window.frameData); //利用id可以調(diào)用到iframe里的變量
      // console.log("frameData?",this.$refs.unity.window.frameData) //利用ref調(diào)用不到iframe里的變量
    },

(1-2)子組件 iframe頁(yè)面 中有一個(gè)被調(diào)用的方法及變量:

  var frameData = "別喊我!" //此變量用于測(cè)試 vue組件是否能調(diào)用此變量
  function getMessageFromParent(value){
    // 接受從vue組件中傳過(guò)來(lái)的參數(shù)
    console.log(`我接收到parent傳過(guò)來(lái)的參數(shù)了:${value}`)
  }
  

點(diǎn)擊按鈕的結(jié)果是:

2.iframe頁(yè)面向vue組件傳參

(2-1)在vue組件中有一個(gè)供iframe頁(yè)面調(diào)用的方法:

    getFromIframe(value) {
      console.log(`我是iframe傳過(guò)來(lái)的參數(shù):${value}`);
      console.log("我被iframe調(diào)用了!");
      console.log(this.vueData);
      console.log(`改變前是:你是否能夠改變我;改變后是:${this.isChangeMe}`);
    }

(2-2)iframe調(diào)用vue組件方法的代碼

  function Obj(res){
  // Obj通過(guò)按鈕點(diǎn)擊觸發(fā)
    console.log(parent)
        // 調(diào)用vue組件方法
      parent.getFromIframe("我叫iframe")
      // 向vue組件發(fā)送參數(shù) && 改變vue組件的參數(shù)
      parent.isChangeMe = "你已經(jīng)被我iframe改變了"
  }

但是 !?。。。。。。。。。。。。。?/p>

只這么做是不夠的,會(huì)報(bào)錯(cuò),如下:

個(gè)人猜想: 問(wèn)題的原因是 iframe的parent并不是vue實(shí)例!

目前只找到了一個(gè)辦法來(lái)解決這個(gè)問(wèn)題:

就是在created鉤子里加上這兩句,

created() {
    window.getFromIframe = this.getFromIframe; //把vue實(shí)例中的方法引用給window對(duì)象
  },

在調(diào)用的vue實(shí)例的方法中 加上對(duì)vue內(nèi)變量的改變

getFromIframe(value) {
      console.log(`我是iframe傳過(guò)來(lái)的參數(shù):${value}`);
      console.log("我被iframe調(diào)用了!");
      console.log(this.vueData);
      this.isChangeMe = window.isChangeMe;// 把window變量 賦值給 vue 實(shí)例變量;使得在iframe中能夠改變vue實(shí)例中變量
      console.log(`改變前是:你是否能夠改變我;改變后是:${this.isChangeMe}`);
    }

最終的運(yùn)行結(jié)果是:

bingo!?。。?! 問(wèn)題暫時(shí)得到了解決。

總結(jié)

vue組件 和 iframe 的嵌入麻煩多多,且目前還沒(méi)還沒(méi)找到正統(tǒng)的方法;此外,還有很多坑我還沒(méi)踩到,如果后續(xù)這方面有什么問(wèn)題 以及 其他的解決方案,我會(huì)繼續(xù)更新到這上面來(lái)的!

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue.js 實(shí)現(xiàn)v-model與{{}}指令方法

    vue.js 實(shí)現(xiàn)v-model與{{}}指令方法

    這篇文章主要介紹了vue.js 實(shí)現(xiàn)v-model與{{}}指令方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • vue3使用自定義指令實(shí)現(xiàn)el dialog拖拽功能示例詳解

    vue3使用自定義指令實(shí)現(xiàn)el dialog拖拽功能示例詳解

    這篇文章主要為大家介紹了vue3使用自定義指令實(shí)現(xiàn)el dialog拖拽功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • vue3數(shù)據(jù)監(jiān)聽(tīng)watch/watchEffect的示例代碼

    vue3數(shù)據(jù)監(jiān)聽(tīng)watch/watchEffect的示例代碼

    我們都知道監(jiān)聽(tīng)器的作用是在每次響應(yīng)式狀態(tài)發(fā)生變化時(shí)觸發(fā),在組合式?API?中,我們可以使用?watch()函數(shù)和watchEffect()函數(shù),下面我們來(lái)看下vue3如何進(jìn)行數(shù)據(jù)監(jiān)聽(tīng)watch/watchEffect,感興趣的朋友一起看看吧
    2023-02-02
  • vue3響應(yīng)式對(duì)象的api超全實(shí)例詳解

    vue3響應(yīng)式對(duì)象的api超全實(shí)例詳解

    可以把數(shù)據(jù)變成響應(yīng)式api的方法叫做響應(yīng)式api,下面這篇文章主要給大家介紹了關(guān)于vue3響應(yīng)式對(duì)象api的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • vue的template模板是如何轉(zhuǎn)為render函數(shù)的過(guò)程

    vue的template模板是如何轉(zhuǎn)為render函數(shù)的過(guò)程

    Vue從template到render函數(shù)的轉(zhuǎn)換經(jīng)歷模板解析、AST構(gòu)建、優(yōu)化、生成渲染函數(shù)等步驟,首先進(jìn)行詞法分析將模板拆解為tokens,再進(jìn)行語(yǔ)法分析構(gòu)建AST,然后對(duì)AST進(jìn)行靜態(tài)標(biāo)記和提升優(yōu)化,最后轉(zhuǎn)換成JavaScript渲染函數(shù),生成虛擬DOM,完成組件的渲染和更新,實(shí)現(xiàn)了模板的高效轉(zhuǎn)化
    2024-10-10
  • vue組件開(kāi)發(fā)之slider組件使用詳解

    vue組件開(kāi)發(fā)之slider組件使用詳解

    這篇文章主要為大家詳細(xì)介紹了vue組件開(kāi)發(fā)之slider組件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 解決el-menu標(biāo)題過(guò)長(zhǎng)顯示不全問(wèn)題

    解決el-menu標(biāo)題過(guò)長(zhǎng)顯示不全問(wèn)題

    本文主要介紹了如何解決el-menu標(biāo)題過(guò)長(zhǎng)顯示不全問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,感興趣的朋友們跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • 深入解析Vue的自定義指令

    深入解析Vue的自定義指令

    這篇文章主要介紹了深入解析Vue的自定義指令,自定義指令主要是為了重用涉及普通元素的底層 DOM 訪問(wèn)的邏輯,一個(gè)自定義指令由一個(gè)包含類似組件生命周期鉤子的對(duì)象來(lái)定義,需要的朋友可以參考下
    2023-05-05
  • vue3使用vuedraggable實(shí)現(xiàn)拖拽功能

    vue3使用vuedraggable實(shí)現(xiàn)拖拽功能

    這篇文章主要為大家詳細(xì)介紹了vue3使用vuedraggable實(shí)現(xiàn)拖拽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue.js一個(gè)文件對(duì)應(yīng)一個(gè)組件實(shí)踐

    Vue.js一個(gè)文件對(duì)應(yīng)一個(gè)組件實(shí)踐

    Vue.js實(shí)現(xiàn)"一個(gè)文件對(duì)應(yīng)一個(gè)組件",無(wú)需webpack等工具,按需加載組件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評(píng)論