Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案

news2024/11/29 8:38:01

一、需求分析

      最近做的一个用H5加原生开发的html项目,现需要集成到Vue2.0项目里面来。遇到的相关问题做个记录和总结,以便能帮到大家避免踩坑。

二、问题记录

1、页面空白问题

     将html页面通过iframe的方式嵌入进来之后,发现页面是空白的,不显示任何元素,

通过搜索资料发现,把html页面放到public目录下面的static目录下能够显示

 

 不写static目录直接访问会报错

2、vue和html页面之间如何通信

首先通过window对象 绑定一个方法 去调用vue声明的方法 

格式为:window[‘方法名’]   = (参数)=>{  vue里面的 你需要在html页面里调用的方法  }

下面是贴的相关代码 三个方法

methods: {
      // 调用方法
      iframeLoad() {
        const iframe = document.querySelector('#iframe')
        this.loading = true
        const that = this
        // 兼容处理
        if (iframe.attachEvent) {
          // IE
          iframe.attachEvent('onload', () => {
            that.loading = false
          })
        } else {
          // 非IE
          iframe.onload = () => {
            that.loading = false
          }
        }
      },
      //查询机组下拉列表
      listSystemQuery(){
        listSystem().then((response) => {
          this.selectData = response.rows || [] //机组下拉列表
          this.sendMessage(1)
        }).catch((error)=>{
          console.log(error)
        })
      },
      //查询所选机组下的查询参数
      listParamsQuery(param){
        const value = param.value
        const number = param.num
        getSystemResult(value).then((response) => {
          this.paramsData = response.data || [] //所选机组参数
          this.sendMessage(2,number)
        }).catch((error)=>{
          console.log(error)
        })
      },
      //点击查询按钮获取对标分析数据
      dbfxQueryData(param){
        const params = {
          id: param.id,
          startTime: param.startTime, //开始时间
          endTime: param.endTime,   //结束时间
          queryParams: param.queryParams,
          timeParam: param.timeParam,//页面录入 持续时间秒
        }
        const num = param.num
        getSystemData(params).then((response) => {
          this.resultData = response.data || [] //所选机组参数
          this.sendMessage(3,num)
        }).catch((error)=>{
          console.log(error)
        })
      },
      sendMessage(num,num2){
        const iframeWindow = document.querySelector('#iframe').contentWindow
        if(num===1){
          iframeWindow.postMessage({
            cmd: 'selectData',
            params: {
              success: true,
              data: this.selectData,
            }
          },'*')  // 发送消息至html页面
        }else if(num ===2){
          iframeWindow.postMessage({
            cmd: 'paramsData',
            params: {
              success: true,
              data: this.paramsData,
              num:num2
            }
          },'*')  // 发送消息至html页面
        }else if(num ===3){
          iframeWindow.postMessage({
            cmd: 'resultData',
            params: {
              success: true,
              data: this.resultData,
              num:num2
            }
          },'*')  // 发送消息至html页面
        }

      },
    }

在vue绑定方法之后 那么如何在html去调用这个方法呢

通过window.parent['vue里面绑定的名称'](需要传递的参数)  可以定义一个对象来传参 这种方法就可以调用到vue里面的方法啦!

       //调用vue方法
          const param ={
            value:selectValue,
            num:num
          }
          window.parent['queryParamsData'](param)

如下 html调用的是这个方法 

 param可以接收到来取值

 html调用vue现在可以拿到数据啦   那么该如何回传到html页面上来使用呢 看下面!

 首先拿到iframe的contentWindow对象,通过这个对象 postMessage 就可以发送消息给到html页面

 html页面接收时是通过message统一接收的,针对发送多个消息的情况下, 我们这里做下区分,

 通过传递不同的参数作为标识来区分是那个接口来发送的消息

html页面同样也要根据传递过来不同的参数 去调整自己的逻辑,首先知道html是如何接收到vue传来的消息的,window监听message即可接收postMessage发送来的消息

再通过传参的不同就可以区分处理逻辑啦

 3、iframe延迟加载提升用户体验

如果不加加载效果,会导致dom元素渲染的很慢,体验感很差,这里通过antdesign的spin渲染组件来搞定它

 那么问题来了,什么情况下知道iframe渲染完了呢,看下面

 iframe对象attachEvent事件可以知道是否已加载完成,再去给他关闭loading即可

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/857850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Why Test?

Why Test? 可测试性(testability)是一种设计的属性,衡量了全面测试制造设计的正确性的难易程度。原始的设计和测试过程是分开的,只有在设计周期的结尾考虑测试。而DFT将测试和设计融合在一起。 来自foundary的device…

Java面向对象++

面向对象编程(高级部分) 类变量和类方法 类变量 类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。 定义语法: 访问修饰符static数据类型变量…

加速招标流程:校对软件优化文件处理效率

校对软件在优化招标流程中可以提高文件处理效率,从而加速整个招标过程。以下是校对软件如何实现这一目标的方式: 1.自动化化校对:校对软件可以自动进行拼写、语法和格式等基本校对,减少人工校对的时间和工作量。这样可以快速检查和…

高忆管理:股票高开能不能买入?风险有哪些?

股票高开往往意味着股票的涨势较好,但也或许是短线资金炒作。那么股票高开能不能买入?危险有哪些?高忆管理也为我们准备了相关内容,以供参阅。 股票高开能不能买入? 股票高开是指当日开盘价高于前一日收盘价的状况&am…

操作系统----信号量

前言: 为了人格的全面发展,大一下时间比较充裕,时间非常紧,很多时候每天只睡4-6小时,除了有我自己惊人的毅力和令人难以置信的“空闲时间外”,还有信念和初心坚守着,社团,活动&#…

冠达管理:大跳水!美国又要下黑手!3300亿巨头突然死亡,疯抢锂矿

美国又要下“黑手”。 据环球网征引路透社音讯,美国政府高级官员泄漏,白宫当地时间9日将具体阐明约束美国在华出资灵敏技能的方案,并要求将其他有关出资奉告政府。 美股商场上演了一场大败局。当地时间8月9日美股盘中,全球同享工…

优化理论 | Time-Sharing Condition

版权声明 原创作品,整理不易,转载请标明出处。本篇推送更详细的内容介绍,可参见本人微信公众号“优化与博弈的数学原理”,公众号二维码参见文末。 编者按 OFDM系统中的功率分配问题是通信领域中的研究热点。本文重点考虑了面向…

网络的管理

一、查看网卡信息 先在虚拟机里看有几个网卡 二、nmcli 1、网卡的物理接口名称 2、网卡的配置信息 三、nmtui 四、下载网站上的文件

BUUCTF题目Web部分wp(持续更新)

[极客大挑战 2019]EasySQL1 靶机启动后,填写username和password,登录的地址为http://url.to.target/check.php?usernameadmin&passwordpassword,注意post过去空格变成了加号。 http://url.to.target/ http://url.to.target/check.php?…

last_hidden_state vs pooler_output的区别

一、问题来源: from transformers import AutoTokenizer, AutoModel import torch # Load model from HuggingFace Hub MODEL_NAME_PATH xxxx/model/bge-large-zh tokenizer AutoTokenizer.from_pretrained(MODEL_NAME_PATH) model AutoModel.from_pretrained(M…

MongoDB 备份与恢复

1.1 MongoDB的常用命令 mongoexport / mongoimport mongodump / mongorestore 有以上两组命令在备份与恢复中进行使用。 1.1.1 导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项&#xff0c…

公检系统升级:校对软件提升司法办案水平

公检系统升级中引入校对软件可以显著提升司法办案水平,为司法工作提供更高效和准确的支持。以下是校对软件在提升司法办案水平方面的作用: 1.提高文书准确性:校对软件可以自动检测和修正法律文书中的语法、拼写和标点等错误。它可以捕捉到人眼…

nginx自定义负载均衡及根据cpu运行自定义负载均衡

1.nginx如何自定义负载均衡 在Nginx中,可以通过配置文件自定义负载均衡策略。具体步骤如下: 首先,在Nginx配置文件中定义一个upstream模块,并设置负载均衡策略和后端服务器列表,例如: upstream myapp {ser…

数字孪生轨道交通,地铁视频孪生三维可视化管控平台

为促进数字孪生城市领域高质量发展,延续《数字孪生城市应用案例汇编(2022年)》已有研究成果,宣传推广一批创新性强、具有示范效应的优秀案例,为各部委及地方政府推动数字孪生城市建设提供有力支撑,中国信息…

使用 Visual Studio Code 调试 CMake 脚本

之前被引入到 Visual Studio 中的 CMake 调试器,现已在 Visual Studio Code 中可用。 也就是说,现在你可以通过在 VS Code 中安装 CMake 工具扩展,来调试你的 CMakeLists.txt 脚本了。是不是很棒? 背景知识 Visual C 开发团队和 CMake 的维…

【数据库】P0 创建数据库环境 MySQL + DataGrip

创建数据库环境 下载安装 MySQL下载安装 DataGrip 下载安装 MySQL Windows版本_MySQL 下载地址: https://dev.mysql.com/downloads/mysql/ 下载后依照默认顺序安装即可,本博文将讲述简约安装步骤; 如需详细安装步骤可见:https:/…

SharePoint 管理

SharePoint平台使您能够以在线方式和本地方式轻松地管理和协调业务数据。因为其灵活性和易使用性,公司可以快速采用SharePoint来管理其业务数据。但是,SharePoint管理员在管理及审核SharePoint服务器时,内容的高级别协作和动态性质会导致问题…

Is a directory: ‘outs//.ipynb_checkpoints‘

提示out/文件夹的.ipynp_chechpoints是一个文件夹,但是打开文件夹却没有看到,可以得知他是一个隐藏文件夹,进入outs/文件夹,使用 ls -a可以看到所有文件 果然出现这个文件夹,但是我们这个outs/文件夹存放的是图片&am…

Django实现音乐网站 ⑼

使用Python Django框架制作一个音乐网站, 本篇主要是后台对专辑、首页轮播图原有功能的基础上进行部分功能实现和显示优化。 目录 专辑功能优化 新增编辑 专辑语种改为下拉选项 添加单曲优化显示 新增单曲多选 更新歌手专辑数、专辑单曲数 获取歌手专辑数 保…

实践指南-前端性能提升 270% | 京东云技术团队

一、背景 当我们疲于开发一个接一个的需求时,很容易忘记去关注网站的性能,到了某一个节点,猛地发现,随着越来越多代码的堆积,网站变得越来越慢。 本文就是从这样的一个背景出发,着手优化网站的前端性能&a…