解决Iframe交互事件window.addEventListener触发多次问题

这篇具有很好参考价值的文章主要介绍了解决Iframe交互事件window.addEventListener触发多次问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前提解释

addEventListener() 方法用于向指定元素添加事件句柄。

提示: 使用 removeEventListener() 方法来移除 addEventListener() 方法添加的事件句柄。

需求背景

当我们审批流交互用到window.postMessage结合window.addEventListene这种消息传递技术来实现安全的通信。简单的来讲就是进行事件交互,如当我们有以下交互时,当判断type是我们需要的数据时,进行调审批拒绝接口操作,

 mounted() {
        window.addEventListener('message', this.handleMesg)
  },

  methods: {
    handleMesg: Debounce(function (e) {
        if (e.data.type == 'getDataDetail') {
          this.$refs.iframe.contentWindow.postMessage(
            workDetailsData.workflowList, //待办详情接口返回的数据
            '*'
          )
        }
        //商品中心调用拒绝接口 批注修改
        if (e.data.type == 'commodityRejected') {
            //调拒绝审批流接口
        }
     })

}

但是此时我们发现会调用多次,当场景简单的时候可能造成不了影响,当场景复杂时,就会多次调用可能会进行数据覆盖导致发生一些奇奇怪怪的BUG

解决方案

解决这调用多次方法也简单,我们在进入这个页面时开始建立这个事件,在离开这个页面时销毁这个事件,保证每次进来就只有一个,此时我们的问题就解决啦文章来源地址https://www.toymoban.com/news/detail-514091.html

workflowMessageCbAdded: false, // 添加锁 定义一个锁

methods:{
    //建立addEventListener事件
    setupMessageListener() {
        if (!this.workflowMessageCbAdded) {
          window.addEventListener('message', this.handleMesg)
          this.workflowMessageCbAdded = true
        }
      },
    //销毁addEventListener事件
      removeMessageListener() {
        window.removeEventListener('message', this.removeMsg)
        this.workflowMessageCbAdded = false
      },
}

activated() {
  this.setupMessageListener()
},
created() {
  this.setupMessageListener()
},

deactivated() {
  this.removeMessageListener()
},
beforeDestroy() {
  this.removeMessageListener()
},

到了这里,关于解决Iframe交互事件window.addEventListener触发多次问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • vue中动态添加class修改div宽高无法触发addEventListener(“resize“)

    在触发事件动态修改class发现resize没有触发。 具体原因没有找到--------无语 因为不知道什么原因只能替代了,网上说resize消耗很大, MutationObserver与ResizeObserver 更节省性能。

    2024年02月12日
    浏览(41)
  • addEventListener is not a function , JavaScript添加监听事件时报错

    简介:在写JavaScript代码的时候,控制台有时候会遇到这样的报错, addEventListener is not a function ,说addEventListener不是一个函数,具体原因是因为监听事件的事件源不对,事件源应该是一个元素,而非其它。 因此我们在获取元素时要注意, getElementsByClassName()、 getElementByTagName

    2024年02月09日
    浏览(50)
  • react hooks 中使用 addEventListener 监听事件无法访问到最新的 state 的问题

    如上述代码所示,props.asyncData 变化之后 hasAsyncData 设置为 true,然后滚动页面,handleMove 中的 hasAsyncData 仍然为初始值 false。 所以这时要在 hasAsyncData 变化后 ,重新绑定 addEventListener 事件 useEffect(() = {   }, [hasAsyncData]) 在useEffect中将他监听起来,从新绑定

    2024年01月21日
    浏览(45)
  • 监听H5浏览器返回事件,解决监听webviewH5返回事件,触发H5给小程序传参(亲测有效)

    在浏览器中,会有点击返回、后退、上一页等按钮实现自己的关闭页面、调整到指定页面、确认离开页面或执行一些其它操作的需求。可以使用 popstate 事件进行监听返回、后退、上一页操作。 1.window.history.back(),后退 2.window.history.forward(),前进 3.window.history.go(num),前进或后

    2024年02月16日
    浏览(38)
  • 微信小程序上拉触底事件函数onReachBottom不触发的解决方案

    配置属性问题 高度问题 滚动条不在顶部 需要回到顶部重新计算高度 onReachBottom函数被覆盖 1.配置属性问题 在app.json或者本页的json文件中配置 onReachBottomDistance 属性,区别在于全局还是只在本页生效 2.高度问题 3. 切换页面时 滚动条滚回到顶部 4. onReachBottom() 函数被覆盖 每个页

    2024年02月11日
    浏览(36)
  • 关于window.addEventListener的小坑

    子窗口向父窗口传值,比如点击按钮弹窗打开iframe ,这时候可以使用,防止跨域。我的问题比较简单,就是监听没有删除,导致多次执行 演示代码,不分父子窗口,直接写一个页面内,仅供参考 父窗口,监听数据 子窗口,发送数据 这个时候,由于我的监听,是放在按钮事

    2024年02月04日
    浏览(38)
  • Unity Blend Tree(动画混合树)与AnimationEvent(动画事件)一起使用所带来的多个动画事件触发的问题及解决方法

    最近在添加人物脚步声效,所以打算使用unity的动画事件来制作,但走路动画是用的2d的混合树,就导致了当动画进行混合播放的时候,动画事件也会一起触发 在unity社区进行搜索后发现了这篇2015年的 帖子 ,在unity官方技术人员的评论下找到了答案: 具体做法是通过返回动画

    2024年02月12日
    浏览(38)
  • 体验ChatGPT在具体应用场景下的能力与表现——vuedraggable的move多次触发问题

    当下人工智能模型在满天飞,今天拿一个具体的应用场景,来体验下ChatGPT的能力与表现,看看是否能解决实际问题。 顺便填一下之前遇到的一个具体的坑:vuedraggable的move多次触发问题。 背景 背景是这样的,实现低代码开发平台过程中,使用vuedraggable组件,通过拖拽式操作

    2023年04月24日
    浏览(42)
  • 微信小程序web-view上覆盖原生组件,解决cover-view点击事件无法触发问题

    结合了以下文章,都没有找到办法 https://blog.csdn.net/WEIGUO19951107/article/details/94305964 https://blog.csdn.net/weixin_39461487/article/details/80075140 https://developers.weixin.qq.com/community/develop/doc/cbd33199b42aec724e54419ebe6371d7 图片显示是这个文章给我了参考,并且成功 https://blog.csdn.net/one_girl/article/deta

    2024年02月11日
    浏览(54)
  • win11启动“适用于Linux的windows的子系统“多次无法打开,重启电脑时总是撤销操作的可能解决方法

    【若本文对您有用请让作者知晓( •̀ ω •́ )y ,如若有疑问可于评论区留言】  目录 前言: 我的问题: 解决方法: 以下是一些具体情况、可能解决方法及原理 避免VMware和WSL的冲突 避免VMware和Hyper-V的冲突 禁用“Accelerate 3D graphics”选项 禁用步骤 卸载VMware 如果卸载完后还

    2024年02月20日
    浏览(64)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包