首页 > 其他分享 >vue+iframe使用及踩坑

vue+iframe使用及踩坑

时间:2024-05-29 16:22:36浏览次数:25  
标签:vue const res iframe 使用 action data id

父级引用

<iframe id="自定义id" @load="iframeLoadHandle" src="引入iframe地址" frameborder="0" scrolling="auto" class="iframe-con" width="100%" height="100%"></iframe>  
@load 为iframe加载完成后触发方法
methods: {
    iframeLoadHandle(){
      const data = {
        action: 'updatedMessageList',
        messageList: this.messageList,
        oldVal: this.oldMessageList,
        target: this.focusHistoryItem
      };
      this.iframeUpdatedHandle(data)
      // messageList更新的数据 action为区分的动作
    },
    iframeUpdatedHandle(data) {
      const iframe = document.getElementById('自定义id'); // 针对需要发送信息模块的iframeidif(!iframe){
        return
      }
      const messageObject = {
          action: 'parentAction',
          module: 'workBench',
          id: 'iframeRecording',
          data
        };
      //   data为可以往iframe传递指定数据
      //   moudule必传  action必传  id必传 data非必传
      iframe.contentWindow.postMessage(messageObject, '*');
    }
}

子级接收

mounted() {
    // 监听message事件- iframe
    window.addEventListener('message', this.handleMessage)
  },
 methods: {
   async handleMessage(event) {
      // 确保消息来自预期的源
      // 如果需要更严格的安全性,请验证event.origin
      const res = event.data
      console.log('---接收数据iframe:', event.data)
       if (window.parent == window) {
         this.msgError('当前页面不在iframe中,是顶级窗口')
         return
      }
      if(res.type === 'webpackWarnings') {
          const data = {
            action: 'requestAgain',
          };  
          const parentData = {moudule: 'iframeText', id:'iframeText', data: data};
          window.parent.postMessage(parentData, '*');
          return
      }
      if (res.action === 'parentAction') {
        // 检查接收到的参数
        if (res.module === 'workBench' && res.id) { 
          if(res.data.action === 'iframeLoadHandle') { // iframe初始化触发action
            // 处理所需逻辑
          } 

        }
      }
    }

 }

 须知:
  1,传参涉及到token信息或者用户,地址等敏感信息需要加密处理再传值,不加密的话有的浏览器不支持会拦截的
  2,如果涉及iframe中调取的接口需要赋值头部token值的话,可以考虑使用localStorage或sessionStorage,因为它们是基于iframe窗口的,而不是基于域名的。这样,每个iframe可以有自己的状态,而不会受到父页面的影响。之前在iframe中使用Cookies.set(TokenKey, token)会存储到父级的cookies中,iframe再获取的时候就获取不到了,除非是同源的,所以最好区分下
  3,iframe标签上的id是唯一的不能重复,处理多个的话id区分下


---------未完待续

 

标签:vue,const,res,iframe,使用,action,data,id
From: https://www.cnblogs.com/liujiajiablog/p/18220542

相关文章

  • openXLSX使用
    1.需求头文件库文件lib打开之前Cmake生成的vs项目随便找个demo项目看看头文件的依赖总共需要两块文件1.OpenXLSX-Exports.hpp位于生成目录2.OpenXLSX.hpp以及headers文件夹 3.新建文件夹将头文件如下放入 4.添加头文件包含 5.添加库文件包含  6.编译......
  • 使用 Marked 2 为 CotEditor 预览 markdown 内容
    CotEditor虽然各种好,但毕竟功能比较轻量,用来编辑markdown甚至没有一个预览功能。不过好在它还支持脚本拓展。我之前曾经用过coteditor_markdown_setPublic仓库里的预览脚本。不过这个脚本的预览依赖Safari实现,而且颇有一些年久失修,很多Markdown特性都不支持。最近突然想......
  • vue中引入公共方法并使用
    1、在utils文件夹中新建utils.js/***通用js方法封装处理两种方式*Copyright(c)2019ruoyi*//**第一种方式*/functionmyFun(){console.log('thisismyfunction')}functionfn1(){console.log("全局方法一")}//将上面连个全局公共方法,组合成一......
  • Google使用AI改进了 Sheets;开源视觉语言模型llama3v;开源情绪语音模型ChatTTS;
    ✨1:GooglehasimprovedSheetswithAI.Google使用AI改进了Sheets您可以使用Gemini处理您的数据并将其变成老师。优化您的数据Gemini了解您的数据并提出改进建议。例如,它可以将重复数据转换为更实用的下拉框。解释数据通过单击双子座图标,您可以自动获......
  • react使用antd实现表格的时间排序
    importReactfrom'react';import{Table}from'antd';importmomentfrom'moment';constdata=[{key:'1',date:'2018-01-11T12:00:00Z',},{key:'2',date:'2......
  • 【原创】YAML-CPP使用记录
    官方源码:https://github.com/jbeder/yaml-cpp环境:Win10,VS2019打开DeveloperPowerShellforVS2019进入yaml-cpp源码目录新建build目录并进入执行:cmake-GNinja-DCMAKE_BUILD_TYPE=Release-DYAML_BUILD_SHARED_LIBS=on..执行:ninjabuild目录生成了文件yaml-cpp.dll,......
  • Winget使用指南
    Chocolatey、Scoop和Winget都是流行的Windows软件包管理工具,最近我使用了Winget安装了Git,使用命令行方式安装或更新软件(特别是非GUI软件——比如Git、Maven等)非常方便,在此简介一下Winget的常用指令。1.是否已安装Winget要确定是否已安装Winget,可以在PowerShell中执行......
  • Vue 3 设置中的新 `<script setup>` 语法是如何使用的?
    Vue3中的新<scriptsetup>语法详解Vue.js作为现代前端框架的一大代表,它简洁易用的特性和不断创新的理念吸引了一大批开发者。在Vue3中推出了很多改进和新特性,其中一个引起广泛关注的便是<scriptsetup>语法。这篇文章将详细介绍Vue3中的<scriptsetup>语法,......
  • 在 Vue 3 中如何实现代码拆分和懒加载?
    在现代开发中,前端应用越来越复杂,同时用户期望应用能够迅速响应。为了解决加载速度问题,前端框架如Vue3提供了代码拆分和懒加载功能。这不仅能提升性能,还能增强用户体验。接下来,我们将详细介绍在Vue3中如何实现代码拆分和懒加载。什么是代码拆分和懒加载?代码拆分(Code......
  • 如何处理 Vue 3 应用程序中的路由守卫?
    Vue3路由守卫详解与实战在现代Web应用程序开发中,路由守卫是一个必不可少的功能。特别是在使用Vue.js进行单页面应用开发时,更是如此。在Vue3中,路由守卫的使用有了更多的灵活性与功能。本文将详细介绍如何在Vue3应用中使用路由守卫,并通过示例代码帮助您更深入地理解和掌......