在vue專案中引入jquery專案
阿新 • • 發佈:2021-11-28
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, }, }, "*" ); },