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         })

 

posted @ 2021-07-28 17:04  googlegis  阅读(2699)  评论(0编辑  收藏  举报

坐标合肥,非典型GIS开发人员 GitHub