美文网首页
12-vue与iframe通信

12-vue与iframe通信

作者: 零涂 | 来源:发表于2023-04-20 11:57 被阅读0次

    iframe(子页面)

    //public/static/index.html
    <body>
      <div class="close-btn" id="close-btn">关闭</div>
      <div class="success-btn" id="success-btn">成功</div>
    </body>
    <script>
        $("#close-btn").click(() => {
            window.parent.postMessage('close', '*');//向父页面传参
        });
        $("#success-btn").click(() => {
            window.parent.postMessage('success', '*');//向父页面传参
        });
        window.addEventListener('message', (e) => {////监听父页面传递的参数
            console.log('父页面传输过来参数',e.data)
        });
    </script>
    

    vue(父页面)

    //index.vue
    <template>
        <el-dialog
              title=""
              :visible.sync="dialogVisible"
              :close-on-click-modal="false"
              custom-class="dialogCssDiv"
              :show-close="false"
              :modal-append-to-body="false"
              class="dialogCss"
            >
              <iframe 
                ref="iframeRef"
                :src="iframeSrc"  
                width="300px" 
                height="500px" 
                scrolling="no" 
                frameborder="0"
              ></iframe>
              <el-button
                  type="primary"
                  size="small"
                  @click.native.prevent="submitBtn"
                  >向子页面传参</el-button
                >
         </el-dialog>
    </template>
    <script>
    export default {
      data(){
        return {
          dialogVisible:'false',
          iframeSrc:'在线地址或本地地址',
          //本地html文件需要放在public文件夹中,如文件位于public/static/index.html,则本地地址应填写为./static.index.html
        }
      },
      created() {
        this.$nextTick(() => {
          window.addEventListener('message', this.messageEvent)//监听子页面传递的参数
        })
      },
      destroyed(){
        window.removeEventListener('message',this.messageEvent)
      },
      methods:{
        messageEvent(messageEvent){
          let data = messageEvent.data;//data为传过来的数据
            if(data == 'close'){
              this.dialogVisible = false;
            }else if(data == 'success'){
              setTimeout(()=>{
                this.dialogVisible = false;
              },1000)
            }
        },
        submitBtn(){
          this.$refs.iframeRef.contentWindow.postMessage('data','*')//向子页面传参
        }
      }
    }
    </script>
    

    相关文章

      网友评论

          本文标题:12-vue与iframe通信

          本文链接:https://www.haomeiwen.com/subject/wiprjdtx.html