1. 程式人生 > 其它 >在vue專案中引入jquery專案

在vue專案中引入jquery專案

vue+iframe+postMessage

法一:a連結跳轉

window.location.href = 'http://127.0.0.1:5500/trtc-calling-web(1)/trtc-calling-web/src/meeting/index.html'

跳轉的url為jquery專案執行之後的url,相當於這是兩個專案,各自有各自的埠

法二:iframe+postMessage跳轉

1.jquery專案要放在public資料夾下

2.在vue中使用iframe標籤

<template>
  <div>
    <iframe
      ref="myiframe"
      name="myiframe"
class="iframe" id="myiframe" style="width: 100%; height: 100%" :src="`/meeting.html?userId=${loginUserInfo.userId}`" frameborder="0" scrolling="no" ></iframe> </div> </template>

說明:/meeting.html為oublic資料夾下的路徑

3.訊息傳遞

跳轉的時候帶引數(?id=123),或者postMessage

外部vue向內部iframe傳送訊息

    let query1 = this.$route.query.event;
    let query2 = this.$route.query.userId;
    let query3 = this.$route.query.roomId;

    document.getElementById("myiframe").onload = function () {
      document.getElementById("myiframe").contentWindow.postMessage(
        {
          cmd: query1,
          params: {
            userId: query2,
            roomId: query3,
          },
        },
        
"*" ); };

內部iframe接收訊息

window.addEventListener('message', (e) => {
      switch(e.data.cmd) {
        case 'create':
          $('#userId').val(e.data.params.userId)
          $('#roomId').val(e.data.params.roomId);
      }
    }, false)

內部iframe向外部vue傳遞訊息

window.parent.postMessage({
      cmd: 'loginsuccess',
      params: {}
    }, "*")

外部vue接收訊息

 window.addEventListener("message", (e) => {
      console.log("父元件接收訊息, 登陸成功", e);
      switch (e.data.cmd) {
        case "loginsuccess":
          var view2 = document.getElementsByClassName("view")[0];
          view2.style.width = "1239px";
          view2.style.height = "827px";
          break
        case "leave":
          this.$router.push("/");
          break
        case 'close':
           this.$router.push("/");
           break
      }
    });

postMessage還有一種方法也可,點選按鈕呼叫sendMessage傳送訊息,

note:mounted直接呼叫sendMessage方法無效,this.$nextTick(function(){}),setTimeout也無效

<button @click="sendMessage">按鈕</button>
this.iframeWin = this.$refs.myiframe.contentWindow;
sendMessage() {
      // 外部vue向iframe內部傳資料
      this.iframeWin.postMessage(
        {
          cmd: this.$route.query.event,
          params: {
            userId: this.$route.query.userId,
            roomId: this.$route.query.roomId,
          },
        },
        "*"
      );
    },