React 实现 iframe内dom绑定事件修改

故事

刚刚搞定了iframe宽高自适应问题,又来新问题了,由于iframe内嵌的是另一套开源系统的网页。哦豁这个时候,iframe中有一些点击事件,我需要对那些事件进行自定义实现。

思考方案

1:将iframe中的JS方法进行重写或者覆盖
失败!由于不想改源码,以后也不一定用得到,得不偿失。
2:让iframe中的标签上的事件调用父页面自己实现的方法
最终实现

说干就干

 <iframe id = 'iframe'
         src={'xxxx'}
         frameborder='0'
         onLoad={() => {
           let doc = document.getElementById("iframe").contentWindow.document.getElementsByTagName("body")[0];
           let imgs = doc.children[0];
           imgs.setAttribute("onclick","javascript:window.parent.downLoadFile()")
           imgs.alt = "下载文件";
           imgs.title = "下载文件";
		   //实现文件下载功能
           window.downLoadFile = function(){
             let src = 'xxx';
             let form = document.createElement('form');
             form.action = src;
             document.getElementsByTagName('body')[0].appendChild(form);
             form.submit();
           }
        }}

 />

核心点

1:通过document.getElementById(“iframe”).contentWindow.document获取到iframe中的子元素
2:获取需要的dom
3:通过setAttribute 覆盖子元素原有的事件(必须通过该玩意进行覆盖,直接赋值会失效)
4:写父页面方法时,必须是全局方法,如果不是需要用window.来进行。eg:window.downLoadFile
5:完成,点击正常调用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sirwsl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值