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

这篇具有很好参考价值的文章主要介绍了Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、需求分析

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

二、问题记录

1、页面空白问题

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

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

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案,vue2.0,JS,前端,vue.js,html,javascript

 Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案,vue2.0,JS,前端,vue.js,html,javascript

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

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

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

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

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案,vue2.0,JS,前端,vue.js,html,javascript

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

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里面的方法啦!

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案,vue2.0,JS,前端,vue.js,html,javascript

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

如下 html调用的是这个方法 

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案,vue2.0,JS,前端,vue.js,html,javascript

 param可以接收到来取值Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案,vue2.0,JS,前端,vue.js,html,javascript

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

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案,vue2.0,JS,前端,vue.js,html,javascript

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

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案,vue2.0,JS,前端,vue.js,html,javascript

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

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

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案,vue2.0,JS,前端,vue.js,html,javascript

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

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

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案,vue2.0,JS,前端,vue.js,html,javascript

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

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

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案,vue2.0,JS,前端,vue.js,html,javascript

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

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案,vue2.0,JS,前端,vue.js,html,javascript

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

 文章来源地址https://www.toymoban.com/news/detail-643054.html

到了这里,关于Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue2如何将页面生成 pdf 导出 html2Canvas + jspdf

    npm i html2canvas npm i jspdf import html2canvas from \\\'html2canvas\\\'; import jsPDF from \\\'jspdf\\\' export const htmlToPDF = async (htmlId, title = \\\"报表\\\", bgColor = \\\"#fff\\\") = {   let pdfDom = document.getElementById(htmlId)   pdfDom.style.padding = \\\'0 10px !important\\\'   const A4Width = 595.28;   const A4Height = 841.89;   let canvas = await html2canvas(pd

    2024年02月16日
    浏览(58)
  • vue页面加载闪烁问题

    页面加载时,进入页面会闪烁显示变量名。 给关联的dom添加 v-cloak 增加css样式

    2024年02月11日
    浏览(43)
  • vue3打包后页面空白解决方法

    最近写一个小项目 没有打包的时候一切正常 技术栈用的vue3 + vite 我用的是npm创建的项目 问题一 :打包后页面空白,什么都没有 问题二:刷新页面后找不到资源 把url的index.html去掉后可以正常显示但是刷新后又会出现新的问题 问题如下 第一步 先在vite.config.js中添加一行代码

    2024年01月16日
    浏览(39)
  • 【项目复盘Vue2-移动端】IOS使用Vant表单组件输入框获取焦点后放大页面,安卓软键盘遮挡问题

    使用Vue+Vant做的移动端项目,在登录界面使用Vant的表单组件van-input时发现在真机测试IOS会出现获取焦点输入时会撑大原页面的宽度,每一个输入框获取到焦点就会页面就会放大一点点,需要双指缩放才能回到原来的比例。 经过一番百度后发现: 在移动端开发项目中,发现页

    2024年02月12日
    浏览(68)
  • Vue路由模式(history模式 刷新页面空白解决方案)

    vue路由的三种模式 Hash模式 、 History模式 、 abstract 模式 Vue3: Hash 模式是用 createWebHashHistory() 创建的: Vue2 它在内部传递的实际 URL 之前使用了一个哈希字符(#)。由于这部分 URL 从未被发送到服务器,所以它不需要在服务器层面上进行任何特殊处理。不过,它在 SEO 中确实有

    2024年02月12日
    浏览(63)
  • 鸿蒙ArkTS Web组件加载空白的问题原因及解决方案

    初学鸿蒙开发,按照官方文档Web组件文档《使用Web组件加载页面》示例中的代码照抄运行后显示空白,纠结之余多方搜索后扔无解决方法。 无意间gitee搜索鸿蒙web组件项目代码时看到 Web组件抽奖案例(ArkTS) Readme文档中有一句话,如下: 本篇Codelab使用了在线网页,需要在配

    2024年02月04日
    浏览(73)
  • react、Vue打包直接运行index.html不空白方法

    在根目录下创建 vue.config.js 文件,写入

    2024年01月21日
    浏览(40)
  • vue项目页面空白但不报错产生的原因分析

    为了避免这种情况我们可以在新页面写一些文字等进行页面展示 如果配置两个路由是重复的,比如配置了两个path:\\\'/user\\\' ,那么访问就会看到空白页面,这时候删除一个重复的配置路由即可 把app.js看成是顶级的路由,再次创建的路由是属于二级路由 路由导航守卫中,next()相当

    2024年02月11日
    浏览(44)
  • vue3在运行时路由可以正常跳转,但是页面空白,刷新页面恢复正常[已解决]

    vue3在运行时路由可以正常跳转,但是页面空白,刷新页面恢复正常,在网上寻找很久说是keepAlive的原因,后来看了看我的代码~ 原来的代码: 改后的代码: 由此可见,根元素一定要由一个div去包裹住! template必须有且只能有一个div 在这样才会正常显示~ 原理: 这里我们要先

    2023年04月27日
    浏览(59)
  • Vue2加载倾斜摄影

    WebGIS学习交流群461555818,欢迎大家。 vue3项目加载倾斜摄影的教程可见此人的教程,亲测可用 https://blog.csdn.net/qq_37750030/article/details/124680036 可是为什么到了vue2的老项目里面用不了呢? 原因在于这几个库,全是ts的! 而在vue2里面是不支持ts的,当然现在的新项目用脚手架创建

    2024年02月02日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包