zoukankan      html  css  js  c++  java
  • Vue使用iframe加载本地html,并进行通信,传递参数

    最近做的一个项目,在Vue中要加载本地的html。

    vue cli 3

    文件主目录中包含 public,

    所以首先在 public 文件夹下新建 static 文件夹,

    然后将html文件及相关引用拷贝到static文件夹下。

    在 vue 的文件中添加iframe的对象。

     1 <template>
     2     <iframe
     3         id = "iframe"
     4         ref="frame"
     5         scrolling="no"
     6         frameborder ="0"
     7         width="100%"
     8         :height="height"
     9         v-bind:src = "src"        
    10         @load="onLoad"
    11         >
    12     </iframe>
    13 </template>

    因为项目中要根据菜单点击来加载不同的html文件,

    所以在 onLoad 中根据传递的参数不同,设置不同的 src 参数值, 注意 this.src 赋值的路径,直接写 static ,前面不需要加任何路径和字符

     1 onLoad(frame) {            
     2           console.log(this.page);
     3           let url = 'static/'+ this.page + '.html'; 
     4           console.log(url);
     5           this.src = 'static/'+ this.page + '.html'; 
     6           
     7           if(this.page=="GisMonitor"){
     8             this.height = '99%';
     9           }
    10           this.iframeWindow = this.$refs.frame.contentWindow;
    11         },

    另外在这里添加了与html页面的通信,使用postMessage 传递参数

     1 sendMsg(message){
     2             switch(message){
     3                 case "GisMonitor":
     4                     console.log(this.iframeWindow);
     5                     console.log("Send:"+message)
     6                     this.iframeWindow.postMessage({
     7                         cmd:'GisMonitor',
     8                         params:{"name":"1"}
     9                     },'*');
    10                     break;
    11                 default:
    12                     break;
    13             }
    14         }

    在html页面中,添加监听事件

    1 this.window.addEventListener('message',function (event) {
    2             let dataMessage = event.data;
    3             console.log("Receive:"+ dataMessage);
    4             switch(dataMessage.cmd){
    5                 case "GisMonitor":
    6                     let val = dataMessage.params;
    7                     console.log(val);
    8             }
    9         })
  • 相关阅读:
    iOS SpriteKit 字体设置无效问题
    2021又来到了!
    其他人员优点
    自己缺点记录
    领导优点分析-于总
    领导优点分析-黄总
    Linux CentOS 7 安装字体库 & 中文字体
    mysql备份数据库
    MySQL mysqldump 导入/导出 结构&数据&存储过程&函数&事件&触发器
    mysql 导入导出数据库以及函数、存储过程的介绍
  • 原文地址:https://www.cnblogs.com/googlegis/p/15071446.html
Copyright © 2011-2022 走看看