当前位置: 首页 > news >正文

阿里验证码Web和H5客户端V3架构接入鼠标拖拽滑块离开对话框释放鼠标时一直处于验证中问题

Web和H5客户端V3架构接入:

现象:鼠标拖拽滑块离开对话框释放鼠标时一直处于验证中,没有触发验证。

分析:V3版本问题,V2无该问题。初步定位是因为V3滑块离开滑块弹框范围时释放鼠标,没有触发mouseup事件,导致插件没有回调验证函数;

解决思路:尝试拖拽在滑块框外面时,手动触发校验,分析getInstance方法返回实列没有对外提供方法触发校验;

思考:手动触发滑块按钮事件,看是不能触发插件的校验回调,通过JS获取滑块dom节点,研究mousedown,mosemove,mouseup, click事件,发现调用滑块的click事件可用触发插件校验回调函数(返回账号密码等信息),效果满足。

结合react工程代码整理如下:

// 获取验证码实例 const getInstance = useCallback( (instance: ICaptchaInstance) => { // 验证码弹窗Dom const sliderElement = document.getElementById('aliyunCaptcha-sliding-slider'); // 滑块按钮Dom const modalElement = document.getElementById('vnnox-care-captcha-modal'); // 先清理上一次注册的事件,避免重复绑定 if (dragCleanupRef.current) { dragCleanupRef.current(); dragCleanupRef.current = null; } if (sliderElement && modalElement) { const handleMouseDown = () => { isDraggingRef.current = true; }; const handleMouseMove = () => { // 仅用于标记拖拽过程,不在此处触发点击 if (!isDraggingRef.current) return; }; const handleMouseUp = (event: MouseEvent) => { if (!isDraggingRef.current) return; isDraggingRef.current = false; const rect = modalElement.getBoundingClientRect(); const { clientX, clientY } = event; const isInside = clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom; // 当拖拽结束(mouseup)时,如果鼠标位置已滑出父元素区域,则触发一次点击 if (!isInside) { // 添加到setTimeout中调用click,解决因调用click验证码弹框消失问题 setTimeout(()=>{ sliderElement.click(); }); } }; sliderElement.addEventListener('mousedown', handleMouseDown); window.addEventListener('mousemove', handleMouseMove); window.addEventListener('mouseup', handleMouseUp); dragCleanupRef.current = () => { sliderElement.removeEventListener('mousedown', handleMouseDown); window.removeEventListener('mousemove', handleMouseMove); window.removeEventListener('mouseup', handleMouseUp); }; } . . . }, [getErrorMessage, handleErrorWithDebounce] );
http://www.jsqmd.com/news/102286/

相关文章:

  • LobeChat单元测试用例生成实验
  • LobeChat密码找回指引生成
  • LobeChat体育赛事即时点评
  • LobeChat HIPAA合规性检查清单
  • LobeChat社区生态现状:有多少开发者正在参与贡献?
  • 如何快速修复Windows运行库问题:Visual C++ Redistributable终极指南
  • LobeChat面试模拟器开发:AI扮演HR进行求职训练
  • LobeChat Slack集成方案:提升团队办公自动化水平
  • LobeChat常见问题FAQ页面建设:减少客服压力
  • LobeChat设备故障排查指南生成
  • LobeChat圆桌讨论议题生成
  • 高校危化试剂仓储系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 基于SpringBoot+Vue的高校物品捐赠管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 避免空白字符的To-Do应用开发
  • SpringBoot+Vue 高校宣讲会管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 深入解析ISRC编码及其在OGG文件中的应用
  • LobeChat能否集成股票行情?金融数据分析助手开发
  • LobeChat诗歌写作能力测评
  • SwiftUI 中的动态 UI 效果
  • Ofd2Pdf使用教程:从OFD到PDF的快速转换指南
  • LobeChat能否集成心率监测?健康数据联动AI预警系统
  • LobeChat实时热点追踪应用
  • 终极PDF对比指南:用diff-pdf轻松识别文档差异
  • 《最长有效括号问题的算法解析与优化:栈方法的理论与实践》
  • LobeChat消费者情绪波动监测
  • LobeChat与Redis缓存结合提升并发处理能力
  • LobeChat能否实现AI辩论功能?双角色对抗模拟实验
  • LobeChat插件系统详解:扩展你的AI能力边界
  • 我的小爱音箱AI升级体验:从智障到智能的完美蜕变
  • 从信息到意义——为什么说整合信息论是一种关于意义的理论