当前位置: 首页 > news >正文

中国网站建设总部在哪里网络营销代运营外包公司

中国网站建设总部在哪里,网络营销代运营外包公司,网站优化可以自己做么,优化方案2022vue 与 iframe 通讯 发送数据vue 向 iframe 发送数据iframe 向 vue 发送数据接收信息( vue iframe 通用) 实现相互通讯通讯流程图实现代码vue 页面iframe页面iframe 内部重定向访问地址,更新 vue 路由 访问跨域代码下载 前言#xff1a;vue嵌套iframe实现步骤 发送数据… vue 与 iframe 通讯 发送数据vue 向 iframe 发送数据iframe 向 vue 发送数据接收信息( vue iframe 通用) 实现相互通讯通讯流程图实现代码vue 页面iframe页面iframe 内部重定向访问地址,更新 vue 路由 访问跨域代码下载 前言vue嵌套iframe实现步骤 发送数据 vue 向 iframe 发送数据 // utils/common.js/** vue向iframe发送数据* content iframe.contentWindow* type 事件类型* data 传送的数据*/export function sendPostMessage(content, type, data {}) {content.postMessage({ type, data }, *);}iframe 向 vue 发送数据 // update.html base.html includes.html ...function sendPostMessage(type, data {}) {window.parent.postMessage({ type, data }, *);}接收信息( vue iframe 通用) 实例化PubSub时, 入参需提前定义不然接收不到消息 // utils/iframe-message.js/*** 接收页面 postMessage 发送的信息* Pubsub提供多种类型供订阅使用方法如下* 1. 需要接收webSocket的地方import eventsPub from 本文件路径* 2. eventsPub.on(类型, callback)* 例* const receive data console.log(eventName, data)* eventsPub.on(eventName, receive)* 3.不需要继续接收时调用* eventsPub.remove(eventName, receive) 移除callback*//** 重要: postMessageEvent 中的 type 需提前定义 */class PubSub {list {};constructor(events) {this.list {};events.forEach(v {this.list[v] [];});}on(ev, callback) {if (this.list[ev]) {this.list[ev].push(callback);return true;} else {return false;}}emit(ev, data) {// data拷贝: 防止其他callback修改dataconst dataStr JSON.stringify(data);if (this.list[ev]) {this.list[ev].forEach((v) {try {v(JSON.parse(dataStr));} catch (err) {console.log(callback error:, err, v);}});return true;} else {return false;}}remove(ev, callback) {if (callback this.list[ev]) {this.list[ev].forEach((v, i) {if (v callback) {this.list[ev].splice(i, 1);}});return true;} else {return false;}}}// 订阅的类型需要在postMessageEvent中提前定义好const postMessageEvent [PAGE_ISREADY]const eventsPub new PubSub(postMessageEvent);window.addEventListener(message, function (e) {if (e.data?.type) {eventsPub.emit(e.data.type, e.data.data)}});export default eventsPub;实现相互通讯 通讯流程图 vue路由更新 及 iframe地址刷新时两者之间的通讯流程 实现代码 vue 页面 // IframeTemplate.vueimport { onMounted, onBeforeUnmount } from vue;import eventsPub from utils/iframe-message.jsimport { sendPostMessage } from utils/common.jsonMounted(() {// 接收信息eventsPub.on(PAGE_ISREADY, pageIsReady)});onBeforeUnmount(() {eventsPub.remove(PAGE_ISREADY, pageIsReady)});function pageIsReady() {// console.log(PAGE_ISREADY)updateIframeLoginInfo()}// 发送信息/** iframe 页面登录信息同步 */function updateIframeLoginInfo() {const iframeWindow $(#common-iframe)[0].contentWindowsendPostMessage(iframeWindow, LOGIN_INFO, {token: localStorage.getItem(TOKEN),userInfo: localStorage.getItem(USER) || {}})}iframe页面 // utils/iframe-message.js// 将该文件写成原生写法: 删除 remove 之后的代码// 添加下边的代码/** 创建消息接收实例 */const postMessageEvent [LOGIN_INFO]const eventsPub new PubSub(postMessageEvent);/** 接收父页面的消息 */window.addEventListener(message, function (e) {if (e.data?.type) {eventsPub.emit(e.data.type, e.data.data)}});/** 发送消息 */function sendPostMessage(type, data {}) {window.parent.postMessage({ type, data }, *);}// base.html、includes.html、update.html...// 在所有的页面中引入iframe-message.js、jquery.jsscript typetext/javascript src./js/jquery.js/scriptscript typetext/javascript src./js/iframe-message.js/script// 并添加下边的代码script typetext/javascript/** 获取当前登录用户信息并存储 */function setUserInfo(data) {const { token, userInfo } data;const curToken localStorage.getItem(TOKEN)const curUser localStorage.getItem(USER)curToken ! token localStorage.setItem(TOKEN, token)curUser ! userInfo localStorage.setItem(USER, userInfo)}$(document).ready(() {// GET VUE MESSAGEeventsPub.on(LOGIN_INFO, setUserInfo)// NOTIFY VUE MESSAGEsendPostMessage(PAGE_ISREADY, { iframeIsReady: true })})/scriptiframe 内部重定向访问地址,更新 vue 路由 需将iframe的地址添加到vue路由上 iframe页面判断是否是内部跳转并将页面地址发送到vue // base.html...function setUserInfo(data) {// 其他...localStorage.setItem(FROM_PARENT, true)}$(document).ready(() {// 其他.../** iframe内部页面跳转加载完成 - */const fromParent localStorage.getItem(FROM_PARENT)localStorage.removeItem(FROM_PARENT)// 判断是否是vue 页面重定向的const { pathname, href, search } window.locationlet path pathname.split(.)[0];sendPostMessage(PAGE_ISREADY, !fromParent ? {} : { path })}) vue 接收到地址后页面路由修改但iframe页面不需要再刷新 // IframeTemplate.vue// 监听路由变更watch(route, () {const historyParams history.state.params// 只更新路由时iframe 页面地址不更新if (historyParams historyParams.justRoute isFrameSrcUpdate route.path !isMounted) {isFrameSrcUpdate ;return;}// iframe 页面地址更新createIframe()});/** iframe 页面加载完毕* 1. 登陆信息同步* 2. iframe 内部跳转,页面地址变化后vue route也修改(但页面不刷新)*/function pageIsReady(data) {updateIframeLoginInfo()if (data?.path) {let { path, name, query } dataisFrameSrcUpdate path;const exit router.getRoutes().find(i i.path path)/** iframe 发送了一个未添加路由的页面* 1. 添加该页面路由,为能正常访问* 2. 在当前页面刷新后会有路由不存在的问题,* 需在整体添加路由的位置将当前页面添加进进去*/!exit router.addRoute({path,name,meta: { isIframe: true },component: () import(../views/IframePage.vue)})// justRoute只更新路由不刷新页面router.push({ path, query, state: { params: { justRoute: true } } });}}访问跨域 问题 部署到环境上后vue页面访问iframe地址会有访问跨域问题。解决方案 在部署vue 服务器配置时允许访问iframe的域名。 如: Apache 部署vue 的服务器配置上添加一行配置Header always append X-Frame-Options iframe访问的域名 代码下载 查看代码地址
http://www.w-s-a.com/news/907586/

相关文章:

  • 文字字体是什么网站西安博达网站建设
  • 北京南昌网站建设网站查看空间商
  • 网站建设人员职责分布乐清市网站建设设计
  • 网站建设etw网站建设陕西
  • 网站文章页内链结构不好可以改吗wordpress英文模板下载
  • 北京天通苑 做网站哈尔滨快速网站排名
  • 网站开发负责人是什么职位试剂网站建设
  • 什么是展示型网站wordpress链接视频
  • 佳木斯城乡建设局网站过年做哪个网站能致富
  • 石家庄快速网站搭建设计公司属于什么企业
  • 中小学智慧校园建设平台网站sem竞价推广
  • 想创建一个网站官方网站建设推广
  • 江门网站优化民间it网站建设
  • 科研实验室网站建设wordpress加载模板
  • 用r做简易的网站软件园二期做网站的公司
  • 菏泽网站建设价格长春高档网站建设
  • PHP网站开发与管理设计心得网站流量图怎么做
  • 苏州做网站企业wordpress点击文字弹出层
  • 做网站必要性中山古镇做网站
  • 增城住房和城乡建设局网站2021网站你懂我意思正能量
  • seo优秀网站深圳企业医疗网站建设
  • 单页 网站 模板重庆微信网站制作专家
  • 石家庄网站定制制作企业所得税优惠政策最新2022文件
  • 免费推广网站途径有哪些郑州企业型网站建设
  • wap网站建设设计wordpress首页名称
  • wordpress网站换空间南宁网站设计可以找我
  • 期货贵金属网站建设招远网站建设哪家专业
  • 上海网站排名个人网站可以做百度推广
  • 网站主题及样式优化个人网站 可以做论坛吗
  • 中企动力 网站推广一级域名免费申请