博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过js 实现 向页面插入js代码并生效,和页面postMessage通讯
阅读量:5836 次
发布时间:2019-06-18

本文共 2308 字,大约阅读时间需要 7 分钟。

      此文章针对已经搭建好jenkins和会使用iconfont图标库而写。

 主要目标就是在不通过更改html文件,完成页面交互图标信息,因为美工最多可以上传代码并且自动发布,并不会在Html中加入我们想要通讯的代码。

*看一下最后的总结

*看一下最后的总结

*看一下最后的总结

有用的内容说三遍

应用场景:

 

 当我双击任意一个图标的时候,应该把图标的class返回到主页面上,并且绑定数据

具体实现步骤。

1.页面嵌入iframe 。

  略过。。

2.确定postMessage 生效。

图标页面需要生效的代码

 
var length = document.getElementsByClassName('iconfont').length for (var i = 0; i < length; i++) {
document.getElementsByClassName('iconfont')[i].ondblclick = function() {
//具体想要返回什么值,可以自己修改js var iconClass = this.parentNode.lastElementChild.innerText.split('.icon-')[1] var iconName = this.parentNode.children[1].innerText window.parent.postMessage(iconClass, '*') alert('已经选中图表为 : < ' + iconName + ' >, 已返回' + iconClass) } }
 

主页面需要生效的代码

mounted() {      const _this = this      window.addEventListener('message', function(rs) {        _this.$emit('getIcon', rs.data)      })    }

此时在页面中双击任何一个图标就已经可以返回你所需要的值了

3.在主页面中,通过js,向iframe嵌入js代码,使postMessage生效

const ifrm = document.getElementsByClassName('ContentIfm')[0].contentDocument        const script = ifrm.createElement('script')        script.innerHTML = `        if (window.getEventListeners(document.getElementsByClassName('iconfont')[0]).dblclick === undefined) {          var length = document.getElementsByClassName('iconfont').length          for (var i = 0; i < length; i++) { document.getElementsByClassName('iconfont')[i].ondblclick = function() { var iconClass = this.parentNode.lastElementChild.innerText.split('.icon-')[1] var iconName = this.parentNode.children[1].innerText window.parent.postMessage(iconClass, '*') alert('已经选中图表为 : < ' + iconName + ' >, 已返回' + iconClass) } } } ` ifrm.body.appendChild(script)

此时,js已经成功嵌入iframe中,并且可以得到返回得到的数据。

 

总结一下:

一共有两个技术点。

一:  页面的postMessage通讯

  子页面使用代码  

  data: 将要发送到其他 window的数据。

    *   :指定哪些窗口接受消息

window.parent.postMessage('返回信息', '*')
 

   父页面使用的代码

    rs:  返回的序列化数据

const _this = this      window.addEventListener('message', function(rs) {        alert(rs.data)      })

   PostMessage 说明: 

二:  向iframe中插入代码

  思路就是用

用js给iframe 的body 用createElement创建script标签,然后appendChild到iframe中
const ifrm = document.getElementsByClassName('ContentIfm')[0].contentDocumentconst script = ifrm.createElement('script') script.innerHTML = `alert('写啥啥好使')` ifrm.body.appendChild(script)

 

转载于:https://www.cnblogs.com/yasoPeng/p/9829951.html

你可能感兴趣的文章
我的2014-相对奢侈的生活
查看>>
Java设计模式
查看>>
华为OJ 名字美丽度
查看>>
微信公众号与APP微信第三方登录账号打通
查看>>
mysql-This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
查看>>
BIEE Demo(RPD创建 + 分析 +仪表盘 )
查看>>
Cocos2dx 3.0开发环境的搭建--Eclipse建立在Android工程
查看>>
基本概念复习
查看>>
重构第10天:提取方法(Extract Method)
查看>>
通过Roslyn构建自己的C#脚本(更新版)(转)
查看>>
红黑树
查看>>
【数据库】
查看>>
WindowManager.LayoutParams 详解
查看>>
Android的Aidl安装方法
查看>>
Linux中rc的含义
查看>>
实现跨交换机VLAN间的通信
查看>>
Java基础之String,StringBuilder,StringBuffer
查看>>
安卓中数据库的搭建与使用
查看>>
AT3908 Two Integers
查看>>
C++ 0X 新特性实例(比较常用的) (转)
查看>>