当前位置: 首页 > 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.gsyq.cn/news/113086.html

相关文章:

  • LobeChat单元测试用例生成实验
  • LobeChat体育赛事即时点评
  • 如何快速修复Windows运行库问题:Visual C++ Redistributable终极指南
  • 高校危化试剂仓储系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 基于SpringBoot+Vue的高校物品捐赠管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • LobeChat能否集成股票行情?金融数据分析助手开发
  • Ofd2Pdf使用教程:从OFD到PDF的快速转换指南
  • 终极PDF对比指南:用diff-pdf轻松识别文档差异
  • LobeChat与Redis缓存结合提升并发处理能力
  • 1、量子漫步与搜索算法:从理论到实践
  • 3、量子漫步与测量过程入门
  • 微信网页版访问困境破局:wechat-need-web插件实战指南
  • 6、格罗弗算法及其推广详解
  • VS Code内置终端调用LobeChat的实验性功能
  • LobeChat OCR插件开发设想:让AI看懂图片中的文字
  • Fiji图像处理软件更新系统深度优化:彻底解决Jaunch组件重复项问题
  • Obsidian主题配置终极指南:轻松打造个性化知识管理界面
  • 抖音视频下载终极指南:3步实现批量采集的简单方法
  • 11、探索量子计算:API调用与线性代数基础
  • 大数据领域 HDFS 集群的自动化运维实践
  • MoviePilot中Mikan站点种子链接获取故障的深度解析与修复指南
  • 深入浅出:用YASM/NASM创建极简Windows可执行文件
  • ctfshow-web135
  • LobeChat能否实现错别字智能纠正?中文写作润色专家
  • 原子指标计算实现方案详解 | qData 数据中台商业版 · 指标平台
  • Cordova与OpenHarmony其他运动类型支持
  • LobeChat安全策略解读:保障数据不出内网的关键设置
  • 大数据领域 ClickHouse 的资源管理策略
  • LobeChat WebSocket通信机制剖析:实时对话是如何实现的?
  • 彼得林奇的“反向思维“在牛市中的应用