CN114879970A - 预防重复触发的方法、装置、设备及存储介质 - Google Patents
预防重复触发的方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114879970A CN114879970A CN202210583215.5A CN202210583215A CN114879970A CN 114879970 A CN114879970 A CN 114879970A CN 202210583215 A CN202210583215 A CN 202210583215A CN 114879970 A CN114879970 A CN 114879970A
- Authority
- CN
- China
- Prior art keywords
- analyzed
- function
- file
- code file
- variable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及客户端技术领域,揭示了一种预防重复触发的方法、装置、设备及存储介质,其中方法包括:获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件;对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理;对每个所述目标文件进行点击事件回调函数的预防重复触发处理;将完成预防重复触发处理的所述前端项目代码文件包作为目标代码文件包。从而使预防重复触发处理的代码的规范相同,有利于前端项目维护困难,避免了存在重复触发的版本发布到生产环境。
Description
技术领域
本申请涉及到客户端技术领域,特别是涉及到一种预防重复触发的方法、装置、设备及存储介质。
背景技术
在前端项目中,通常会出现用户重复点击按钮而造成程序重复触发的情况。程序在短时间内被重复触发,主要存在两种问题,第一种是如果重复触发的程序的逻辑比较复杂,占用客户端硬件的处理器、内存比较大,容易造成客户端性能消耗过大,使得页面操作出现卡顿,甚至出现内存溢出导致应用崩溃,第二种是如果触发的程序重复执行,该执行的动作会调用后端提交数据等操作,会使得后端收到多条提交数据,导致数据的混乱和服务端资源的浪费。不同的开发人员,对重复触发的预防方式方法的处理方式不同,导致前端项目维护困难;而且经常会遗漏进行重复触发的预防处理,导致存在重复触发的版本发布到生产环境。
发明内容
本申请的主要目的为提供一种预防重复触发的方法、装置、设备及存储介质,旨在解决对重复触发的预防方式方法的处理方式不同,导致前端项目维护困难,存在重复触发的版本发布到生产环境的技术问题。
为了实现上述发明目的,本申请提出一种预防重复触发的方法,所述方法包括:
获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件;
对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理;
对每个所述目标文件进行点击事件回调函数的预防重复触发处理;
将完成预防重复触发处理的所述前端项目代码文件包作为目标代码文件包。
进一步的,所述获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件的步骤,包括:
获取开发代码地址配置数据;
从所述开发代码地址配置数据对应的存储空间中,获取所述前端项目代码文件包;
若所述前端项目代码文件包对应的框架是vue框架,则将所述前端项目代码文件包中的文件格式为.vue的每个前端项目代码文件作为待分析代码文件;
若所述前端项目代码文件包对应的框架是react框架,则将所述前端项目代码文件包中的文件格式为.js的每个所述前端项目代码文件作为所述待分析代码文件;
采用所述前端项目代码文件包对应的框架对应的点击事件识别方法,对所述待分析代码文件进行是否存在点击事件判断,得到判断结果;
若所述判断结果为是,则将所述待分析代码文件作为所述目标文件。
进一步的,所述采用所述前端项目代码文件包对应的框架对应的点击事件识别方法,对所述待分析代码文件进行是否存在点击事件判断,得到判断结果的步骤,包括:
若所述前端项目代码文件包对应的框架是vue框架,则在所述待分析代码文件中的页面展示模板标签内查找是否存在预设的绑定监听关键字,若是,则将所述判断结果确定为是;
若所述前端项目代码文件包对应的框架是react框架,则判断所述待分析代码文件中是否属于react组件,若是,则在所述待分析代码文件的所述react组件内的渲染组件方法的程序终止关键字的输出内容中是否包含预设的事件点击关键字,若是,则将所述判断结果确定为是。
进一步的,所述对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理的步骤,包括:
获取原生方法名称配置数据;
根据所述原生方法名称配置数据中的每个原生方法名称对,在所述目标文件中进行调用查找,得到调用查找结果,其中,所述原生方法名称对包括:原生发起等待方法名称和原生结束等待方法名称;
将所述调用查找结果为成功的每个所述原生方法名称对,作为命中方法名称对;
根据目标命中方法名称对,从所述目标文件中获取引入方法文件地址,其中,所述目标命中方法名称对是任一个所述命中方法名称对;
根据所述引入方法文件地址,从所述前端项目代码文件包中查找文件,得到待处理文件;
从所述待处理文件中找出所述命中方法名称对对应的方法定义本体,作为待处理代码;
将预设的透明蒙层增加方法,添加到所述待处理文件中的与所述待处理代码相同的层级,其中,所述透明蒙层增加方法用于增加覆盖页面的透明蒙层;
采用预设的展示层级值,对所述待处理文件中的所述透明蒙层增加方法进行展示层级设置;
在所述待处理文件中的所述透明蒙层增加方法的透明蒙层展示标签的最外层添加标识属性,得到蒙层标识;
将预设的透明蒙层移除方法,添加到所述待处理文件中的与所述待处理代码相同的层级;
将所述蒙层标识作为对所述待处理文件中的所述透明蒙层移除方法的入参;
将预设的透明蒙层增加调用方法,添加到所述待处理代码中的第一位置,其中,所述第一位置是所述命中方法名称对中的所述原生发起等待方法名称对应的方法之前的位置,所述透明蒙层增加调用方法用于调用所述待处理文件中的所述透明蒙层增加方法;
将预设的透明蒙层移除调用方法,添加到所述待处理代码中的第二位置,其中,所述第二位置是所述命中方法名称对中的所述原生结束等待方法名称对应的方法之后的位置,所述透明蒙层移除调用方法用于调用所述待处理文件中的所述透明蒙层移除方法。
进一步的,所述对每个所述目标文件进行点击事件回调函数的预防重复触发处理的步骤,包括:
采用所述前端项目代码文件包对应的框架对应的点击事件回调函数查找方法,从所述目标文件中进行点击事件回调函数查找,作为待分析函数;
判断所述待分析函数中是否存在预设的延时执行函数关键字;
若是,则将执行方式判断结果确定为异步执行;
若否,则判断所述待分析函数中是否存在预设的接口请求方法名称配置数据中的任一个接口请求方法名称,若是,则将所述执行方式判断结果确定为异步执行,否则,将所述执行方式判断结果确定为同步执行;
若所述执行方式判断结果为异步执行,对所述待分析函数进行异步执行操作的预防重复触发处理;
若所述执行方式判断结果为同步执行,对所述待分析函数进行同步执行操作的预防重复触发处理。
进一步的,所述对所述待分析函数进行异步执行操作的预防重复触发处理的步骤,包括:
在所述待分析函数中的开始位置定义第一全局变量;
将所述第一全局变量初始化为不执行标识;
根据所述第一全局变量,在所述待分析函数中的第三位置增加第一变量判断逻辑,其中,所述第三位置是所述待分析函数中的定义所述第一全局变量之后的位置,所述第一变量判断逻辑用于在所述第一全局变量为执行标识时,对所述待分析函数进行程序终止处理;
根据所述第一全局变量,在所述待分析函数中的第四位置增加第一变量赋值逻辑,其中,所述第四位置是所述待分析函数中的所述第一变量判断逻辑之后的位置,所述第一变量赋值逻辑用于将所述第一全局变量设为执行标识;
若所述待分析函数中存在预设的延时执行函数关键字,则根据所述第一全局变量,在所述待分析函数中的最后一行增加第二变量赋值逻辑,其中,所述第二变量赋值逻辑用于将所述第一全局变量设为不执行标识;
若所述待分析函数中存在预设的接口请求方法名称配置数据中的任一个接口请求方法名称,则根据所述第一全局变量,在所述待分析函数中的预设的回调函数方法申明体内的最后一行代码中增加第三变量赋值逻辑,其中,所述第三变量赋值逻辑用于将所述第一全局变量设为不执行标识,所述回调函数方法申明体包括:接口返回成功的回调函数的方法申明体、接口异常的回调函数的方法申明体、接口超时的回调函数的方法申明体。
进一步的,所述对所述待分析函数进行同步执行操作的预防重复触发处理的步骤,包括:
在所述待分析函数中的开始位置定义第二全局变量;
将所述第二全局变量初始化为不执行标识;
根据所述第二全局变量,在所述待分析函数中的第五位置增加第二变量判断逻辑,其中,所述第五位置是所述待分析函数中的定义所述第二全局变量之后的位置,所述第二变量判断逻辑用于在所述第二全局变量为执行标识时,对所述待分析函数进行程序终止处理;
根据所述第二全局变量,在所述待分析函数中的第六位置增加第四变量赋值逻辑,其中,所述第六位置是所述第二变量判断逻辑之后的位置,所述第四变量赋值逻辑用于将所述第二全局变量设为执行标识;
在所述待分析函数中的第七位置增加延迟执行定时器,其中,所述第七位置是所述待分析函数中的所述第四变量赋值逻辑之后的位置;
在所述待分析函数中的最后一行增加第五变量赋值逻辑,其中,所述第五变量赋值逻辑用于将所述第二全局变量设为不执行标识;
在所述待分析函数中的最后一行增加第一定时器处理逻辑,其中,所述第一定时器处理逻辑用于在所述待分析函数执行完时,对所述待分析函数中的所述延迟执行定时器进行清除处理;
在所述待分析函数中的最后一行增加第二定时器处理逻辑,其中,所述第二定时器处理逻辑用于判断所述待分析函数中的所述延迟执行定时器是否存在,若存在,则将所述第二全局变量设为不执行标识,对所述待分析函数中的所述延迟执行定时器进行清除处理。
本申请还提出了一种预防重复触发的装置,所述装置包括:
目标文件确定模块,用于获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件;
第一处理模块,用于对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理;
第二处理模块,用于对每个所述目标文件进行点击事件回调函数的预防重复触发处理;
目标代码文件包确定模块,用于将完成预防重复触发处理的所述前端项目代码文件包作为目标代码文件包。
本申请还提出了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述方法的步骤。
本申请还提出了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的方法的步骤。
本申请的预防重复触发的方法、装置、设备及存储介质,其中方法通过获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件;对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理;对每个所述目标文件进行点击事件回调函数的预防重复触发处理;将完成预防重复触发处理的所述前端项目代码文件包作为目标代码文件包。从而实现了采用统一的标准进行预防重复触发处理,使预防重复触发处理的代码的规范相同,有利于前端项目维护困难;自动化进行预防重复触发处理,避免遗漏,避免了存在重复触发的版本发布到生产环境。
附图说明
图1为本申请一实施例的预防重复触发的方法的流程示意图;
图2为本申请一实施例的预防重复触发的装置的结构示意框图;
图3为本申请一实施例的计算机设备的结构示意框图。
本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
参照图1,本申请实施例中提供一种预防重复触发的方法,所述方法包括以下步骤S1-S4:
S1:获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件;
S2:对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理;
S3:对每个所述目标文件进行点击事件回调函数的预防重复触发处理;
S4:将完成预防重复触发处理的所述前端项目代码文件包作为目标代码文件包。
本实施例实现了采用统一的标准进行预防重复触发处理,使预防重复触发处理的代码的规范相同,有利于前端项目维护困难;自动化进行预防重复触发处理,避免遗漏,避免了存在重复触发的版本发布到生产环境。
采用JavaScript,将本申请实现为工具包,然后将该工具包添加到前端开发框架项目中。然后在前端开发框架项目的配置文件中进行开发代码地址配置数据、原生方法名称配置数据和接口请求方法名称配置数据的配置。开发代码地址配置数据,是前端开发框架项目中的前端代码所在文件夹的地址。原生方法名称配置数据包括一个或多个原生方法名称对。接口请求方法名称配置数据包括一个或多个接口请求方法名称。比如,配置文件表述为:config.js。
可选的,在前端开发框架项目的配置文件中还可以进行同步任务重复触发时间间隔配置。同步任务重复触发时间间隔是一个具体的时长数值。
JavaScript(简称“JS”),是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。
可选的,前端开发框架项目采用vue框架。vue,是一套用于构建用户界面的渐进式JavaScript框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。
可选的,前端开发框架项目采用react框架。react,是用于构建用户界面的JavaScript库,起源于Facebook的内部项目,该公司对市场上所有JavaScript MVC框架都不满意,决定自行开发一套,用于架设Instagram的网站。
对于S1,可以从前端开发框架项目中获取前端项目代码所在文件夹中的各个前端项目代码文件,以形成前端项目代码文件包。
其中,从所述前端项目代码文件包中查找出存在点击事件的每个文件,将查找出的每个文件作为一个目标文件。存在点击事件的文件,也就是需要进行预防重复触发的文件。
对于S2,在前端项目中,有使用到原生native(如安卓、ios应用)提供的发起等待/结束等待的页面(如loading动画),之所以会使用原生的发起等待页面(UI),是因为原生的发起等待页面可以覆盖整个屏幕,包括原生提供的页面顶部(包含左上角返回按钮,中间的页面标题),可以做到防止屏幕可视区域点击。但是会存在一个问题,因为调用原生的发起等待页面方法,是一个异步的动作,执行调用后,并不会等到页面最终展示出来,就接着执行后面的逻辑。所以在执行调用到页面到最终展示出来这段时间内,是有概率被用户再次触发到点击事件的。针对这种问题,需要进行预防重复触发处理。
原生native,也就是Native Method,一个Native Method就是一个Java调用非Java代码的接口。方法的实现由非Java语言实现,比如C或C++。
其中,首先识别出所述目标文件中的原生发起等待方法和原生结束等待方法,然后针对识别出的原生原生发起等待方法和原生结束等待方法引起的点击事件添加预防重复触发的逻辑。
对于S3,点击事件回调函数有概率被用户多次触发,因此需要进行预防重复触发处理。
其中,首先识别出所述目标文件中的点击事件回调函数,然后针对识别出的点击事件回调函数引起的点击事件添加预防重复触发的逻辑。
对于S4,完成预防重复触发处理的所述前端项目代码文件包将在点击事件被重复触发时不会多次执行,因此,将完成预防重复触发处理的所述前端项目代码文件包作为目标代码文件包,从而在将目标代码文件包发布到生产环境时,不会因为重复触发影响客户端的性能。
在一个实施例中,上述获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件的步骤,包括以下步骤S11-S16:
S11:获取开发代码地址配置数据;
S12:从所述开发代码地址配置数据对应的存储空间中,获取所述前端项目代码文件包;
S13:若所述前端项目代码文件包对应的框架是vue框架,则将所述前端项目代码文件包中的文件格式为.vue的每个前端项目代码文件作为待分析代码文件;
S14:若所述前端项目代码文件包对应的框架是react框架,则将所述前端项目代码文件包中的文件格式为.js的每个所述前端项目代码文件作为所述待分析代码文件;
S15:采用所述前端项目代码文件包对应的框架对应的点击事件识别方法,对所述待分析代码文件进行是否存在点击事件判断,得到判断结果;
S16:若所述判断结果为是,则将所述待分析代码文件作为所述目标文件。
本实施例自动化根据不同的框架采用不同的方法识别出存在点击事件的文件,提高了自动化程度。
对于S11,可以获取用户输入的开发代码地址配置数据,也可以将开发代码地址配置数据写入实现本申请的程序中,还可以将开发代码地址配置数据写入配置文件中。
对于S12,从所述开发代码地址配置数据对应的存储空间中,获取前端项目代码文件,将获取的各个前端项目代码文件作为所述前端项目代码文件包。
对于S13,若所述前端项目代码文件包对应的框架是vue框架,则在所述前端项目代码文件包中查找文件格式为.vue的每个文件,将查找到的每个文件作为待分析代码文件。
.vue是一个自定义的文件类型,用类似HTML的语法描述一个Vue组件。
对于S14,若所述前端项目代码文件包对应的框架是react框架,则在所述前端项目代码文件包中查找文件格式为.js的每个文件,将查找到的每个文件作为所述待分析代码文件。
.js是JavaScript语言文件的扩展名。
对于S15,采用所述前端项目代码文件包对应的框架对应的点击事件识别方法,对所述待分析代码文件进行是否存在点击事件判断,若存在点击事件,则确定判断结果为是,若不存在点击事件,则确定判断结果为否。
对于S16,若所述判断结果为是,此时意味着所述待分析代码文件中存在点击事件,则将所述待分析代码文件作为所述目标文件。
在一个实施例中,上述采用所述前端项目代码文件包对应的框架对应的点击事件识别方法,对所述待分析代码文件进行是否存在点击事件判断,得到判断结果的步骤,包括以下步骤S151-S152:
S151:若所述前端项目代码文件包对应的框架是vue框架,则在所述待分析代码文件中的页面展示模板标签内查找是否存在预设的绑定监听关键字,若是,则将所述判断结果确定为是;
S152:若所述前端项目代码文件包对应的框架是react框架,则判断所述待分析代码文件中是否属于react组件,若是,则在所述待分析代码文件的所述react组件内的渲染组件方法的程序终止关键字的输出内容中是否包含预设的事件点击关键字,若是,则将所述判断结果确定为是。
本实施例在框架是vue框架时,通过查找绑定监听关键字确定存在点击事件,在框架是react框架时,在所述待分析代码文件属于react组件并且包含预设的事件点击关键字时确定存在点击事件,从而实现了采用所述前端项目代码文件包对应的框架对应的点击事件识别方法,对所述待分析代码文件进行是否存在点击事件判断,自动化根据不同的框架采用不同的方法识别出存在点击事件的文件,提高了自动化程度。
对于S151,若所述前端项目代码文件包对应的框架是vue框架,在意味着需要采用vue框架对应的点击事件识别方法,对所述待分析代码文件进行是否存在点击事件判断,因此,在所述待分析代码文件内部,在页面展示模板标签内查找是否预设的绑定监听关键字,若存在,说明该页面存在点击事件,符合预防重复触发的条件,将所述判断结果确定为是,若不存在,说明该页面不存在点击事件,不符合预防重复触发的条件,将所述判断结果确定为否。
页面展示模板标签,是与页面展示相关的模板标签。模板标签表述为template。
可选的,绑定监听关键字表述为@click或者v-on:click。
对于S152,若所述前端项目代码文件包对应的框架是react框架,在意味着需要采用react框架对应的点击事件识别方法,对所述待分析代码文件进行是否存在点击事件判断,因此,在所述待分析代码文件内,判断是否存在定义一个class类,并且该class类集成自react库本身的component类,若存在,则说明所述待分析代码文件属于一个react组件,需要进行是否存在点击事件判断,若不存在,则说明所述待分析代码文件不属于一个react组件,不需要进行是否存在点击事件判断;若是,也就是说所述待分析代码文件中属于react组件,因此,在所述待分析代码文件内的定义class类的内部,查找关于渲染组件部分的渲染组件内的程序终止关键字输出的内容中是否包含事件点击关键字;若是,也就是包含事件点击关键字,此时意味着该组件的页面上存在点击事件,符合预防重复触发的条件,因此将所述判断结果确定为是;若否,也就是不包含事件点击关键字,此时意味着该组件的页面上不存在点击事件,不符合预防重复触发的条件,因此将所述判断结果确定为否。
Class类(在java.lang包中,Instances of the class Classrepresent classesand interfaces in a running Javaapplication):在Java中,每个class都有一个相应的Class对象。
component类,就是组件。
程序终止关键字表述为return。
渲染组件方法,也就是render方法。
事件点击关键字表述为onClick。
在一个实施例中,上述对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理的步骤,包括以下步骤S21-S213:
S21:获取原生方法名称配置数据;
S22:根据所述原生方法名称配置数据中的每个原生方法名称对,在所述目标文件中进行调用查找,得到调用查找结果,其中,所述原生方法名称对包括:原生发起等待方法名称和原生结束等待方法名称;
S23:将所述调用查找结果为成功的每个所述原生方法名称对,作为命中方法名称对;
S24:根据目标命中方法名称对,从所述目标文件中获取引入方法文件地址,其中,所述目标命中方法名称对是任一个所述命中方法名称对;
S25:根据所述引入方法文件地址,从所述前端项目代码文件包中查找文件,得到待处理文件;
S26:从所述待处理文件中找出所述命中方法名称对对应的方法定义本体,作为待处理代码;
S27:将预设的透明蒙层增加方法,添加到所述待处理文件中的与所述待处理代码相同的层级,其中,所述透明蒙层增加方法用于增加覆盖页面的透明蒙层;
S28:采用预设的展示层级值,对所述待处理文件中的所述透明蒙层增加方法进行展示层级设置;
S29:在所述待处理文件中的所述透明蒙层增加方法的透明蒙层展示标签的最外层添加标识属性,得到蒙层标识;
S210:将预设的透明蒙层移除方法,添加到所述待处理文件中的与所述待处理代码相同的层级;
S211:将所述蒙层标识作为对所述待处理文件中的所述透明蒙层移除方法的入参;
S212:将预设的透明蒙层增加调用方法,添加到所述待处理代码中的第一位置,其中,所述第一位置是所述命中方法名称对中的所述原生发起等待方法名称对应的方法之前的位置,所述透明蒙层增加调用方法用于调用所述待处理文件中的所述透明蒙层增加方法;
S213:将预设的透明蒙层移除调用方法,添加到所述待处理代码中的第二位置,其中,所述第二位置是所述命中方法名称对中的所述原生结束等待方法名称对应的方法之后的位置,所述透明蒙层移除调用方法用于调用所述待处理文件中的所述透明蒙层移除方法。
本实施例实现了采用统一的标准进行原生发起等待方法和原生结束等待方法的预防重复触发处理,使预防重复触发处理的代码的规范相同,有利于前端项目维护困难;而且通过设置透明蒙层以实现预防重复触发,并设置了透明蒙层的增加、移除,从而在预防重复触发的情况下,避免影响正常操作。
对于S21,可以获取用户输入的原生方法名称配置数据,也可以将原生方法名称配置数据写入实现本申请的程序中,还可以将原生方法名称配置数据写入配置文件中。
对于S22,在所述目标文件中,查找调用所述原生方法名称配置数据中的每个原生方法名称对,将存在调用的原生方法名称对对应的调用查找结果确定为成功,将不存在调用的原生方法名称对对应的调用查找结果确定为失败。
所述原生方法名称对包括:原生发起等待方法名称和原生结束等待方法名称,也就是说,所述原生方法名称对是原生发起等待方法名称和原生结束等待方法名称组成的方法名称对。
对于S23,将所述调用查找结果为成功的每个所述原生方法名称对,作为命中方法名称对,从而确定了预防重复触发的基础。
对于S24,将任一个所述命中方法名称对作为目标命中方法名称对;从所述目标文件中的调用目标命中方法名称对的文件内,查找引用目标命中方法名称对对应的方法的文件地址,作为引入方法文件地址。
对于S25,从所述前端项目代码文件包中查找到所述引入方法文件地址对应的文件,将查找到的文件作为待处理文件。
待处理文件中包含了对目标命中方法名称对对应的两个方法的定义。
对于S26,通过所述命中方法名称对对应的方法名称,从所述待处理文件中找到方法定义本体,将找到的两个方法定义本体作为待处理代码。也就是说,待处理代码中包括目标命中方法名称对中的原生发起等待方法名称对应的方法的方法定义本体,以及目标命中方法名称对中的原生结束等待方法名称对应的方法的方法定义本体。
对于S27,在所述待处理文件中的与所述待处理代码相同的层级,新增定义一个方法,该方法就是透明蒙层增加方法,透明蒙层增加方法用于为当前页面添加一个覆盖整个页面的透明蒙层。可以理解的是,覆盖整个页面不包含原生提供的页面顶部区域,因为这部分不属于前端页面展示的内容。
对于S28,可选的,展示层级值设为999。
其中,将所述待处理文件中的所述透明蒙层增加方法进行展示层级的值设为与预设的展示层级值相同,从而使透明蒙层覆盖在所有展示内容之上。
对于S29,在所述待处理文件中的所述透明蒙层增加方法的透明蒙层展示标签的最外,增加一个id属性,将增加的id属性作为蒙层标识,以用于后续步骤的识别。
对于S210,在所述待处理文件中的与所述待处理代码相同的层级,添加预设的透明蒙层移除方法,其中,透明蒙层移除方法用于在调用浏览器窗口对象提供的查找页面元素的方法getElementById,并将透明蒙层移除。
getElementById,是将具有指定的id值的要素作为Element对象返回的方法。
对于S211,将所述蒙层标识作为对所述待处理文件中的所述透明蒙层移除方法的入参,从而使所述待处理文件中透明蒙层移除方法能将步骤S27至步骤28设置的透明蒙层移除。
对于S212,在定义原生发起等待方法名称对应的方法的方法体内,在最顶层部分(也就是第一位置),增加透明蒙层增加调用方法。透明蒙层增加调用方法用于调用透明蒙层增加方法,为整个页面增加透明蒙层,防止在执行调用到UI到最终展示出来这段时间内,有概率被用户再此触发到点击事件的问题。
对于S213,在定义所述原生结束等待方法名称对应的方法的方法体内,在最底层部分(也就是第二位置)之后,增加透明蒙层移除调用方法。透明蒙层移除调用方法用于调用步骤S210至步骤S211对应的透明蒙层移除方法,以去掉整个页面的透明蒙层。
在一个实施例中,上述对每个所述目标文件进行点击事件回调函数的预防重复触发处理的步骤,包括以下步骤S31-S36:
S31:采用所述前端项目代码文件包对应的框架对应的点击事件回调函数查找方法,从所述目标文件中进行点击事件回调函数查找,作为待分析函数;
S32:判断所述待分析函数中是否存在预设的延时执行函数关键字;
S33:若是,则将执行方式判断结果确定为异步执行;
S34:若否,则判断所述待分析函数中是否存在预设的接口请求方法名称配置数据中的任一个接口请求方法名称,若是,则将所述执行方式判断结果确定为异步执行,否则,将所述执行方式判断结果确定为同步执行;
S35:若所述执行方式判断结果为异步执行,对所述待分析函数进行异步执行操作的预防重复触发处理;
S36:若所述执行方式判断结果为同步执行,对所述待分析函数进行同步执行操作的预防重复触发处理。
本实施例先从目标文件中查找点击事件回调函数,然后判断点击事件回调函数的执行方式,根据执行方式采用不同的方法进行点击事件回调函数的预防重复触发处理,实现了采用统一的标准进行点击事件回调函数的预防重复触发处理,使预防重复触发处理的代码的规范相同,有利于前端项目维护困难。
对于S31,采用所述前端项目代码文件包对应的框架对应的点击事件回调函数查找方法,从所述目标文件中进行点击事件回调函数查找,将查找到的点击事件回调函数作为待分析函数。
当所述前端项目代码文件包对应的框架是vue框架时,首先在所述目标文件中查找绑定监听关键字的属性值,该属性值是点击当前元素标签所触发的回调函数对应的名称,因此将该属性值作为第一名称;然后在所述目标文件中的统一编写函数方法的methods(方法)对象内,查找与所述第一名称对应的函数方法申明实体,将查找到的函数方法申明实体作为待分析函数。
若所述前端项目代码文件包对应的框架是react框架时,首先在所述目标文件中查找事件点击关键字的属性值,该属性值是点击当前元素标签所触发的回调函数对应的名称,因此将该属性值作为第二名称;然后在所述目标文件中的定义当前组件的class类内,在输出渲染组件部分的render方法(也就是渲染组件方法)相同层级的地方,查找与所述第二名称对应的函数方法申明实体,将查找到的函数方法申明实体作为待分析函数。
对于S32,判断所述待分析函数中是否存在预设的延时执行函数关键字,若存在预设的延时执行函数关键字,意味着所述待分析函数的执行方式为异步执行。
可选的,延时执行函数关键字为setTimeout。
对于S33,若是,也就是所述待分析函数中存在预设的延时执行函数关键字,此时意味着所述待分析函数的执行方式为异步执行,因此,将执行方式判断结果确定为同步执行。
对于S34,若否,也就是所述待分析函数中不存在预设的延时执行函数关键字,此时还不能确定所述待分析函数的执行方式,因此,判断所述待分析函数中是否存在预设的接口请求方法名称配置数据中的任一个接口请求方法名称;若是,也就是所述待分析函数中存在预设的接口请求方法名称配置数据中的任一个接口请求方法名称,此时意味着所述待分析函数的内部存在异步执行的操作,因此,将所述执行方式判断结果确定为异步执行;若否,也就是所述待分析函数中不存在预设的接口请求方法名称配置数据中的任一个接口请求方法名称,此时意味着所述待分析函数的内部不存在异步执行的操作,因此,将所述执行方式判断结果确定为同步执行。
对于S35,若所述执行方式判断结果为异步执行,采用预设的异步执行预防重复触发处理方法,对所述待分析函数进行异步执行操作的预防重复触发处理。
对于S36,若所述执行方式判断结果为同步执行,采用预设的同步执行预防重复触发处理方法,对所述待分析函数进行同步执行操作的预防重复触发处理。
在一个实施例中,上述对所述待分析函数进行异步执行操作的预防重复触发处理的步骤,包括以下步骤S351-S356:
S351:在所述待分析函数中的开始位置定义第一全局变量;
S352:将所述第一全局变量初始化为不执行标识;
S353:根据所述第一全局变量,在所述待分析函数中的第三位置增加第一变量判断逻辑,其中,所述第三位置是所述待分析函数中的定义所述第一全局变量之后的位置,所述第一变量判断逻辑用于在所述第一全局变量为执行标识时,对所述待分析函数进行程序终止处理;
S354:根据所述第一全局变量,在所述待分析函数中的第四位置增加第一变量赋值逻辑,其中,所述第四位置是所述待分析函数中的所述第一变量判断逻辑之后的位置,所述第一变量赋值逻辑用于将所述第一全局变量设为执行标识;
S355:若所述待分析函数中存在预设的延时执行函数关键字,则根据所述第一全局变量,在所述待分析函数中的最后一行增加第二变量赋值逻辑,其中,所述第二变量赋值逻辑用于将所述第一全局变量设为不执行标识;
S356:若所述待分析函数中存在预设的接口请求方法名称配置数据中的任一个接口请求方法名称,则根据所述第一全局变量,在所述待分析函数中的预设的回调函数方法申明体内的最后一行代码中增加第三变量赋值逻辑,其中,所述第三变量赋值逻辑用于将所述第一全局变量设为不执行标识,所述回调函数方法申明体包括:接口返回成功的回调函数的方法申明体、接口异常的回调函数的方法申明体、接口超时的回调函数的方法申明体。
本实施例通过定义第一全局变量,通过对第一全局变量的调用、赋值,完成异步执行操作的预防重复触发处理。
对于S351,在所述待分析函数中的开始位置定义一个全局变量,将定义的全局变量作为第一全局变量。
对于S352,可选的,不执行标识表述为false,执行标识表述为true。
对于S353,在所述待分析函数中的定义所述第一全局变量之后的位置(也就是第三位置),增加针对所述第一全局变量的判断逻辑,该判断逻辑为第一变量判断逻辑;在所述第一全局变量为执行标识时,通过程序终止关键字对所述待分析函数进行程序终止处理。
对于S354,在所述待分析函数中的所述第一变量判断逻辑之后的位置(也就是第四位置),增加针对所述第一全局变量的赋值逻辑,该赋值逻辑为第一变量赋值逻辑,所述第一变量赋值逻辑用于将所述第一全局变量设为执行标识。
对于S355,若所述待分析函数中存在预设的延时执行函数关键字,在调用延时执行函数关键字对应的方法时,传入的回调函数(也就是所述待分析函数)内的最后一行代码中,增加对所述第一全局变量的赋值逻辑,将该赋值逻辑作为第二变量赋值逻辑,所述第二变量赋值逻辑用于将所述第一全局变量设为不执行标识,以用于保证在异步函数执行完成后,才可以再次触发触发点击的逻辑。
对于S356,若所述待分析函数中存在预设的接口请求方法名称配置数据中的任一个接口请求方法名称,在调用接口请求方法名称对应的方法时,会传入三个参数,这三个参数分别是接口返回成功的回调函数(也就是success方法)、接口异常的回调函数(也就是error方法)、接口超时的回调函数(也就是timeout方法),在三个函数的方法申明体(也就是接口返回成功的回调函数的方法申明体、接口异常的回调函数的方法申明体、接口超时的回调函数的方法申明体)内的最后一行代码中,增加对第一全局变量的赋值逻辑,将该赋值逻辑作为第三变量赋值逻辑,所述第三变量赋值逻辑用于将所述第一全局变量设为不执行标识,以保证这三种情况下的回调函数方法执行完成之后,才可以再次触发点击的逻辑。
在一个实施例中,上述对所述待分析函数进行同步执行操作的预防重复触发处理的步骤,包括以下步骤S361-S368:
S361:在所述待分析函数中的开始位置定义第二全局变量;
S362:将所述第二全局变量初始化为不执行标识;
S363:根据所述第二全局变量,在所述待分析函数中的第五位置增加第二变量判断逻辑,其中,所述第五位置是所述待分析函数中的定义所述第二全局变量之后的位置,所述第二变量判断逻辑用于在所述第二全局变量为执行标识时,对所述待分析函数进行程序终止处理;
S364:根据所述第二全局变量,在所述待分析函数中的第六位置增加第四变量赋值逻辑,其中,所述第六位置是所述第二变量判断逻辑之后的位置,所述第四变量赋值逻辑用于将所述第二全局变量设为执行标识;
S365:在所述待分析函数中的第七位置增加延迟执行定时器,其中,所述第七位置是所述待分析函数中的所述第四变量赋值逻辑之后的位置;
S366:在所述待分析函数中的最后一行增加第五变量赋值逻辑,其中,所述第五变量赋值逻辑用于将所述第二全局变量设为不执行标识;
S367:在所述待分析函数中的最后一行增加第一定时器处理逻辑,其中,所述第一定时器处理逻辑用于在所述待分析函数执行完时,对所述待分析函数中的所述延迟执行定时器进行清除处理;
S368:在所述待分析函数中的最后一行增加第二定时器处理逻辑,其中,所述第二定时器处理逻辑用于判断所述待分析函数中的所述延迟执行定时器是否存在,若存在,则将所述第二全局变量设为不执行标识,对所述待分析函数中的所述延迟执行定时器进行清除处理。
本实施例通过定义第二全局变量,通过对第二全局变量的调用、赋值,以及延迟执行定时器的增加及清除,以实现完成同步执行操作的预防重复触发处理。
对于S361,在所述待分析函数中的开始位置定义一个全局变量,将定义的全局变量作为第二全局变量。
对于S363,在所述待分析函数中的定义所述第二全局变量之后的位置(也就是第五位置),增加针对所述第二全局变量的判断逻辑,该判断逻辑为第二变量判断逻辑;在所述第二全局变量为执行标识时,通过程序终止关键字对所述待分析函数进行程序终止处理。
对于S364,在所述第二变量判断逻辑之后的位置(也就是第六位置),增加针对所述第二全局变量的赋值逻辑,该赋值逻辑为第四变量赋值逻辑,所述第四变量赋值逻辑用于将所述第二全局变量设为执行标识。
对于S365,在所述待分析函数中的所述第四变量赋值逻辑之后的位置,增加一个setTimeout方法设置的延迟执行定时器。
可以理解的是,若配置文件中配置有同步任务重复触发时间间隔,则将配置文件中的同步任务重复触发时间间隔作为所述延迟执行定时器的延时时间;若配置文件中没有配置同步任务重复触发时间间隔,则将所述延迟执行定时器的延时时间设置预设时长。
可选的,预设时长为1000毫秒。
对于S366,在所述待分析函数中的最后一行,增加针对所述第二全局变量增加一个赋值逻辑,将该赋值逻辑作为第五变量赋值逻辑,所述第五变量赋值逻辑用于将所述第二全局变量设为不执行标识,从而保证在延时时间结束之后,才可以再次触发点击的逻辑。
对于S367,在所述待分析函数中的最后一行增加定时器处理逻辑,将该定时器处理逻辑作为第一定时器处理逻辑,所述第一定时器处理逻辑用于在所述待分析函数执行完时,对所述待分析函数中的所述延迟执行定时器进行清除处理,从而确保在所述延迟执行定时器的延时时间结束时,将所述待分析函数中的所述延迟执行定时器清除。
对于S368,在所述待分析函数中的最后一行增加定时器处理逻辑,将该定时器处理逻辑作为第二定时器处理逻辑,若所述待分析函数中的所述延迟执行定时器存在,则说明程序在延时时间结束前就已经执行完成了,此时需要增加对第二全局变量的重新赋值,赋值为不执行标识,此时不管所述延迟执行定时器是否执行完成,都需要将所述待分析函数中的所述延迟执行定时器清除。从而保证程序执行完成之后,还可以再次被触发执行。
参照图2,本申请还提出了一种预防重复触发的装置,所述装置包括:
目标文件确定模块100,用于获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件;
第一处理模块200,用于对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理;
第二处理模块300,用于对每个所述目标文件进行点击事件回调函数的预防重复触发处理;
目标代码文件包确定模块400,用于将完成预防重复触发处理的所述前端项目代码文件包作为目标代码文件包。
本实施例实现了采用统一的标准进行预防重复触发处理,使预防重复触发处理的代码的规范相同,有利于前端项目维护困难;自动化进行预防重复触发处理,避免遗漏,避免了存在重复触发的版本发布到生产环境。
参照图3,本申请实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于储存预防重复触发的方法等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种预防重复触发的方法。所述预防重复触发的方法,包括:获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件;对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理;对每个所述目标文件进行点击事件回调函数的预防重复触发处理;将完成预防重复触发处理的所述前端项目代码文件包作为目标代码文件包。
本实施例实现了采用统一的标准进行预防重复触发处理,使预防重复触发处理的代码的规范相同,有利于前端项目维护困难;自动化进行预防重复触发处理,避免遗漏,避免了存在重复触发的版本发布到生产环境。
本申请一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现一种预防重复触发的方法,包括步骤:获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件;对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理;对每个所述目标文件进行点击事件回调函数的预防重复触发处理;将完成预防重复触发处理的所述前端项目代码文件包作为目标代码文件包。
上述执行的预防重复触发的方法,实现了采用统一的标准进行预防重复触发处理,使预防重复触发处理的代码的规范相同,有利于前端项目维护困难;自动化进行预防重复触发处理,避免遗漏,避免了存在重复触发的版本发布到生产环境。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双速据率SDRAM(SSRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上所述仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (10)
1.一种预防重复触发的方法,其特征在于,所述方法包括:
获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件;
对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理;
对每个所述目标文件进行点击事件回调函数的预防重复触发处理;
将完成预防重复触发处理的所述前端项目代码文件包作为目标代码文件包。
2.根据权利要求1所述的预防重复触发的方法,其特征在于,所述获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件的步骤,包括:
获取开发代码地址配置数据;
从所述开发代码地址配置数据对应的存储空间中,获取所述前端项目代码文件包;
若所述前端项目代码文件包对应的框架是vue框架,则将所述前端项目代码文件包中的文件格式为.vue的每个前端项目代码文件作为待分析代码文件;
若所述前端项目代码文件包对应的框架是react框架,则将所述前端项目代码文件包中的文件格式为.js的每个所述前端项目代码文件作为所述待分析代码文件;
采用所述前端项目代码文件包对应的框架对应的点击事件识别方法,对所述待分析代码文件进行是否存在点击事件判断,得到判断结果;
若所述判断结果为是,则将所述待分析代码文件作为所述目标文件。
3.根据权利要求2所述的预防重复触发的方法,其特征在于,所述采用所述前端项目代码文件包对应的框架对应的点击事件识别方法,对所述待分析代码文件进行是否存在点击事件判断,得到判断结果的步骤,包括:
若所述前端项目代码文件包对应的框架是vue框架,则在所述待分析代码文件中的页面展示模板标签内查找是否存在预设的绑定监听关键字,若是,则将所述判断结果确定为是;
若所述前端项目代码文件包对应的框架是react框架,则判断所述待分析代码文件中是否属于react组件,若是,则在所述待分析代码文件的所述react组件内的渲染组件方法的程序终止关键字的输出内容中是否包含预设的事件点击关键字,若是,则将所述判断结果确定为是。
4.根据权利要求1所述的预防重复触发的方法,其特征在于,所述对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理的步骤,包括:
获取原生方法名称配置数据;
根据所述原生方法名称配置数据中的每个原生方法名称对,在所述目标文件中进行调用查找,得到调用查找结果,其中,所述原生方法名称对包括:原生发起等待方法名称和原生结束等待方法名称;
将所述调用查找结果为成功的每个所述原生方法名称对,作为命中方法名称对;
根据目标命中方法名称对,从所述目标文件中获取引入方法文件地址,其中,所述目标命中方法名称对是任一个所述命中方法名称对;
根据所述引入方法文件地址,从所述前端项目代码文件包中查找文件,得到待处理文件;
从所述待处理文件中找出所述命中方法名称对对应的方法定义本体,作为待处理代码;
将预设的透明蒙层增加方法,添加到所述待处理文件中的与所述待处理代码相同的层级,其中,所述透明蒙层增加方法用于增加覆盖页面的透明蒙层;
采用预设的展示层级值,对所述待处理文件中的所述透明蒙层增加方法进行展示层级设置;
在所述待处理文件中的所述透明蒙层增加方法的透明蒙层展示标签的最外层添加标识属性,得到蒙层标识;
将预设的透明蒙层移除方法,添加到所述待处理文件中的与所述待处理代码相同的层级;
将所述蒙层标识作为对所述待处理文件中的所述透明蒙层移除方法的入参;
将预设的透明蒙层增加调用方法,添加到所述待处理代码中的第一位置,其中,所述第一位置是所述命中方法名称对中的所述原生发起等待方法名称对应的方法之前的位置,所述透明蒙层增加调用方法用于调用所述待处理文件中的所述透明蒙层增加方法;
将预设的透明蒙层移除调用方法,添加到所述待处理代码中的第二位置,其中,所述第二位置是所述命中方法名称对中的所述原生结束等待方法名称对应的方法之后的位置,所述透明蒙层移除调用方法用于调用所述待处理文件中的所述透明蒙层移除方法。
5.根据权利要求1所述的预防重复触发的方法,其特征在于,所述对每个所述目标文件进行点击事件回调函数的预防重复触发处理的步骤,包括:
采用所述前端项目代码文件包对应的框架对应的点击事件回调函数查找方法,从所述目标文件中进行点击事件回调函数查找,作为待分析函数;
判断所述待分析函数中是否存在预设的延时执行函数关键字;
若是,则将执行方式判断结果确定为异步执行;
若否,则判断所述待分析函数中是否存在预设的接口请求方法名称配置数据中的任一个接口请求方法名称,若是,则将所述执行方式判断结果确定为异步执行,否则,将所述执行方式判断结果确定为同步执行;
若所述执行方式判断结果为异步执行,对所述待分析函数进行异步执行操作的预防重复触发处理;
若所述执行方式判断结果为同步执行,对所述待分析函数进行同步执行操作的预防重复触发处理。
6.根据权利要求5所述的预防重复触发的方法,其特征在于,所述对所述待分析函数进行异步执行操作的预防重复触发处理的步骤,包括:
在所述待分析函数中的开始位置定义第一全局变量;
将所述第一全局变量初始化为不执行标识;
根据所述第一全局变量,在所述待分析函数中的第三位置增加第一变量判断逻辑,其中,所述第三位置是所述待分析函数中的定义所述第一全局变量之后的位置,所述第一变量判断逻辑用于在所述第一全局变量为执行标识时,对所述待分析函数进行程序终止处理;
根据所述第一全局变量,在所述待分析函数中的第四位置增加第一变量赋值逻辑,其中,所述第四位置是所述待分析函数中的所述第一变量判断逻辑之后的位置,所述第一变量赋值逻辑用于将所述第一全局变量设为执行标识;
若所述待分析函数中存在预设的延时执行函数关键字,则根据所述第一全局变量,在所述待分析函数中的最后一行增加第二变量赋值逻辑,其中,所述第二变量赋值逻辑用于将所述第一全局变量设为不执行标识;
若所述待分析函数中存在预设的接口请求方法名称配置数据中的任一个接口请求方法名称,则根据所述第一全局变量,在所述待分析函数中的预设的回调函数方法申明体内的最后一行代码中增加第三变量赋值逻辑,其中,所述第三变量赋值逻辑用于将所述第一全局变量设为不执行标识,所述回调函数方法申明体包括:接口返回成功的回调函数的方法申明体、接口异常的回调函数的方法申明体、接口超时的回调函数的方法申明体。
7.根据权利要求5所述的预防重复触发的方法,其特征在于,所述对所述待分析函数进行同步执行操作的预防重复触发处理的步骤,包括:
在所述待分析函数中的开始位置定义第二全局变量;
将所述第二全局变量初始化为不执行标识;
根据所述第二全局变量,在所述待分析函数中的第五位置增加第二变量判断逻辑,其中,所述第五位置是所述待分析函数中的定义所述第二全局变量之后的位置,所述第二变量判断逻辑用于在所述第二全局变量为执行标识时,对所述待分析函数进行程序终止处理;
根据所述第二全局变量,在所述待分析函数中的第六位置增加第四变量赋值逻辑,其中,所述第六位置是所述第二变量判断逻辑之后的位置,所述第四变量赋值逻辑用于将所述第二全局变量设为执行标识;
在所述待分析函数中的第七位置增加延迟执行定时器,其中,所述第七位置是所述待分析函数中的所述第四变量赋值逻辑之后的位置;
在所述待分析函数中的最后一行增加第五变量赋值逻辑,其中,所述第五变量赋值逻辑用于将所述第二全局变量设为不执行标识;
在所述待分析函数中的最后一行增加第一定时器处理逻辑,其中,所述第一定时器处理逻辑用于在所述待分析函数执行完时,对所述待分析函数中的所述延迟执行定时器进行清除处理;
在所述待分析函数中的最后一行增加第二定时器处理逻辑,其中,所述第二定时器处理逻辑用于判断所述待分析函数中的所述延迟执行定时器是否存在,若存在,则将所述第二全局变量设为不执行标识,对所述待分析函数中的所述延迟执行定时器进行清除处理。
8.一种预防重复触发的装置,其特征在于,所述装置包括:
目标文件确定模块,用于获取前端项目代码文件包,并且从所述前端项目代码文件包中识别出存在点击事件的每个文件,作为目标文件;
第一处理模块,用于对每个所述目标文件进行原生发起等待方法和原生结束等待方法的预防重复触发处理;
第二处理模块,用于对每个所述目标文件进行点击事件回调函数的预防重复触发处理;
目标代码文件包确定模块,用于将完成预防重复触发处理的所述前端项目代码文件包作为目标代码文件包。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210583215.5A CN114879970A (zh) | 2022-05-25 | 2022-05-25 | 预防重复触发的方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210583215.5A CN114879970A (zh) | 2022-05-25 | 2022-05-25 | 预防重复触发的方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114879970A true CN114879970A (zh) | 2022-08-09 |
Family
ID=82677479
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210583215.5A Pending CN114879970A (zh) | 2022-05-25 | 2022-05-25 | 预防重复触发的方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114879970A (zh) |
-
2022
- 2022-05-25 CN CN202210583215.5A patent/CN114879970A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107766101B (zh) | App启动事件的处理方法、装置和设备 | |
CN108304498B (zh) | 网页数据采集方法、装置、计算机设备和存储介质 | |
CN110244942B (zh) | 一种页面生成方法、装置及系统 | |
CN111078339B (zh) | 界面元素定位方法、装置、计算机设备和存储介质 | |
TW201640342A (zh) | 應用程式頁面快速存取方法及應用其的行動終端 | |
CN111443902B (zh) | 函数调用树生成方法、系统、计算机设备及可读存储介质 | |
CN112732742B (zh) | 查询页面创建方法、装置、计算机设备和存储介质 | |
CN112632358B (zh) | 一种资源链接获取方法、装置、电子设备及存储介质 | |
CN111026988A (zh) | 一种页面加载的方法、装置、系统及计算机设备 | |
CN112528619A (zh) | 页面模板文件生成方法、装置、电子设备和存储介质 | |
CN111783019A (zh) | 浏览器子页面创建方法、装置、计算机设备和存储介质 | |
CN115098062A (zh) | 一种代码生成方法及装置 | |
CN113868502A (zh) | 一种页面爬虫方法、装置、电子设备及可读存储介质 | |
CN114879970A (zh) | 预防重复触发的方法、装置、设备及存储介质 | |
CN113032078A (zh) | 页面展示方法、装置、电子设备和计算机可读存储介质 | |
CN116186439A (zh) | 浏览器页面渲染方法、装置、电子设备及可读存储介质 | |
US8365194B2 (en) | Creating and processing dynamic proxy actions for actions that are not yet registered with a client side broker | |
CA3191206A1 (en) | Webpage automation robot processing method and system | |
CN112163173B (zh) | 网页加载方法、装置、电子设备和计算机可读存储介质 | |
CN114611045A (zh) | 前端接口请求的处理方法、装置、计算机设备及存储介质 | |
CN109062620B (zh) | Android帧动画执行方法、装置、终端及可读介质 | |
US8495138B2 (en) | Processing responses to a web page | |
CN111694619A (zh) | 基于刷新率的定时器实现方法、装置、设备及存储介质 | |
CN108491448B (zh) | 一种数据推送的方法和装置 | |
CN115544404B (zh) | 一种h5单页应用路由组件动态缓存方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |