掌桥专利:专业的专利平台
掌桥专利
首页

浏览器兼容性提升方法、装置、设备及存储介质

文献发布时间:2023-06-19 09:57:26


浏览器兼容性提升方法、装置、设备及存储介质

技术领域

本发明涉及研发管理领域,尤其涉及一种浏览器兼容性提升方法、装置、设备及存储介质。

背景技术

随着社会的发展,越来越多的用户通过浏览器进行网页浏览,同在,越来越多的工作流也由桌面应用转移至浏览器端使用。伴随在新颖技术不停迭代的当下,显得有心无力,遗留了众多不兼容、不规范API,为了使用户体验一致化,低版本浏览器使用高级方法及属性,延伸出了Polyfill概念。Polyfill是一块代码(通常是Web上的JavaScript),用来为低版本浏览器提供没有原生支持的较新功能。比如,Object.assign方法,它用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。在业务开发过程中,该方法大大提高了合并及潜拷贝对象的开发效率,但由于低版本IE浏览器的不兼容,导致用户效验下降,甚至无用户体验,此时Polyfill解决了向下兼容的问题,使用户体验一致化。但Polyfill也并不是没有缺点,它仅针对低版本浏览器不兼容的方法及属性去做补丁修复。对于语法层面,仍然无能为力,且大量的Polyfill检测会一定程度上影响应用性能。

发明内容

本发明的主要目的在于解决现有的低版本浏览器语法的兼容性低的技术问题。

本发明第一方面提供了一种浏览器兼容性提升方法,包括:

获取浏览器的前端文件;

将所述前端文件输入预设的语法分析器,通过所述语法分析器将所述前端文件解析为第一抽象语法树;

遍历所述第一抽象语法树的所有节点,获取所述第一抽象语法树中各节点的代码实现版本;

将所有所述第一抽象语法树的节点中代码实现版本高于预设版本的节点的代码用预设版本的代码替换降低所述第一抽象语法树中实现方式高于预设版本的节点的版本,得到第二抽象语法树;

遍历所述第二抽象语法树的所有节点,并将所述第二抽象语法树所有的所有节点中的不兼容节点的代码用对应的兼容性代码替换;

将代码替换后的第二抽象语法树输入所述语法分析器,通过所述语法分析器将所述第二抽象语法树转换为兼容性前端文件,并将所述兼容性前端文件输入所述浏览器的工程目录中。

可选的,在本发明第一方面的第一种实现方式中,所述将所述前端文件输入预设的语法分析器,通过所述语法分析器将所述前端文件解析为第一抽象语法树包括:

将所述前端文件输入所述语法分析器,通过所述语法分析器对所述前端文件进行词法分析,将所述前端文件转换为由词法单元组成的数组;

根据所述数组生成所述前端文件的第一抽象语法树。

可选的,在本发明第一方面的第二种实现方式中,所述将所述前端文件输入所述语法分析器,通过所述语法分析器对所述前端文件进行词法分析,将所述前端文件转换为由词法单元组成的数组包括:

将所述前端文件输入所述语法分析器,通过所述语法分析器对所述前端文件的源代码进行逐行扫描并将所述源代码分解成词法单元,其中,所述词法单元为编程语言中字符串形式的基本单词符号;

将所述词法单元序列组合成数组。

可选的,在本发明第一方面的第三种实现方式中,所述根据所述数组生成所述前端文件的第一抽象语法树包括:

根据所述数组对所述源代码进行语法分析,判断所述源代码的语法是否正确;

若是,则根据预设的源代码语言规范,生成与所述源代码对应的语法分析树;

调用所述语法分析树中各节点对应的节点对象创建方法,创建节点对象,根据所述节点对象生成第一抽象语法树。

可选的,在本发明第一方面的第四种实现方式中,在所述将所述前端文件输入预设的语法分析器,通过所述语法分析器将所述前端文件解析为第一抽象语法树之前,还包括:

判断所述前端文件中的每个源代码的语句是否有缺失;

若所述源代码的语句有缺失,则舍弃所述源代码。

可选的,在本发明第一方面的第五种实现方式中,所述遍历所述第二抽象语法树的所有节点,并将所述第二抽象语法树所有的所有节点中的不兼容节点的代码用对应的兼容性代码替换包括:

读取所述第二抽象语法树的根节点,并将所述根节点作为当前结点;

判断当前节点的type值是否符合转换条件;

若符合转换条件,则根据预设的对应关系,获取所述当前节点的源代码对应的兼容性代码;

将所述兼容性代码替换当前节点的源代码,并跳转至检测当前节点是否在所述第二抽象语法树的节点底部的步骤;

若不符合转换条件,则直接跳转至检测当前节点是否在所述第二抽象语法树的节点底部的步骤;

检测当前节点是否在所述第二抽象语法树的节点底部;

若当前节点在所述第二抽象语法树的节点底部,则结束遍历;

若当前节点不在所述第二抽象语法树的节点底部,则读取下一节点作为当前节点,并跳转至判断当前节点的type值是否符合转换条件的步骤。

本发明第二方面提供了一种浏览器兼容性提升装置,包括:

获取模块,用于获取浏览器的前端文件;

输入模块,用于将所述前端文件输入预设的语法分析器,通过所述语法分析器将所述前端文件解析为第一抽象语法树;

第一遍历模块,用于遍历所述第一抽象语法树的所有节点,获取所述第一抽象语法树中各节点的代码实现版本;

替换模块,用于将所有所述第一抽象语法树的节点中代码实现版本高于预设版本的节点的代码用预设版本的代码替换降低所述第一抽象语法树中实现方式高于预设版本的节点的版本,得到第二抽象语法树;

第二遍历模块,用于遍历所述第二抽象语法树的所有节点,并将所述第二抽象语法树所有的所有节点中的不兼容节点的代码用对应的兼容性代码替换;

输出模块,用于将代码替换后的第二抽象语法树输入所述语法分析器,通过所述语法分析器将所述第二抽象语法树转换为兼容性前端文件,并将所述兼容性前端文件输入所述浏览器的工程目录中。

可选的,在本发明第二方面的第一种实现方式中,所述输入模块包括:

词法分析单元,用于将所述前端文件输入所述语法分析器,通过所述语法分析器对所述前端文件进行词法分析,将所述前端文件转换为由词法单元组成的数组;

语法树生成单元,用于根据所述数组生成所述前端文件的第一抽象语法树。

可选的,在本发明第二方面的第二种实现方式中,所述词法分析单元具体用于:

将所述前端文件输入所述语法分析器,通过所述语法分析器对所述前端文件的源代码进行逐行扫描并分解成词法单元,其中,所述词法单元为编程语言中字符串形式的基本单词符号;

将所述词法单元序列组合成数组。

可选的,在本发明第二方面的第三种实现方式中,所述语法树生成单元具体用于:

根据所述数组对所述源代码进行语法分析,判断所述源代码的语法是否正确;

若是,则根据预设的源代码语言规范,生成与所述源代码对应的语法分析树;

调用所述语法分析树中各节点对应的节点对象创建方法,创建节点对象,根据所述节点对象生成第一抽象语法树。

可选的,在本发明第二方面的第四种实现方式中,所述浏览器兼容性提升装置还包括判断模块,所述判断模块具体用于:

判断所述前端文件中的每个源代码的语句是否有缺失;

若所述源代码的语句有缺失,则舍弃所述源代码。

可选的,在本发明第二方面的第五种实现方式中,所述第二遍历模块具体用于:

读取所述第二抽象语法树的根节点,并将所述根节点作为当前结点;

判断当前节点的type值是否符合转换条件;

若符合转换条件,则根据预设的对应关系,获取所述当前节点的源代码对应的兼容性代码;

将所述兼容性代码替换当前节点的源代码,并跳转至检测当前节点是否在所述第二抽象语法树的节点底部的步骤;

若不符合转换条件,则直接跳转至检测当前节点是否在所述第二抽象语法树的节点底部的步骤;

检测当前节点是否在所述第二抽象语法树的节点底部;

若当前节点在所述第二抽象语法树的节点底部,则结束遍历;

若当前节点不在所述第二抽象语法树的节点底部,则读取下一节点作为当前节点,并跳转至判断当前节点的type值是否符合转换条件的步骤。

本发明第三方面提供了一种浏览器兼容性提升设备,包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互连;所述至少一个处理器调用所述存储器中的所述指令,以使得所述浏览器兼容性提升设备执行上述的浏览器兼容性提升方法。

本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的浏览器兼容性提升方法。

本发明的技术方案中,获取浏览器的前端文件;将所述前端文件输入预设的语法分析器,通过所述语法分析器将所述前端文件解析为第一抽象语法树;遍历所述第一抽象语法树的所有节点,获取所述第一抽象语法树中各节点的代码实现版本;将所有所述第一抽象语法树的节点中代码实现版本高于预设版本的节点的代码用预设版本的代码替换,得到第二抽象语法树;遍历所述第二抽象语法树的所有节点,将所述第二抽象语法树的所有节点中的不兼容节点的代码用对应的兼容性代码替换;将代码替换后的第二抽象语法树输入所述语法分析器,通过所述语法分析器将所述第二抽象语法树转换为兼容性前端文件,并将所述兼容性前端文件输入所述浏览器的工程目录中。本提案通过将浏览器的前端文件进行词法分析和语法分析生成抽象语法树,并将抽象语法树中的节点按照兼容性规则进行替换,是的抽象语法树中的所有节点都具备兼容性,并将替换后的抽象语法树转换为兼容性前端文件,将兼容性前端文件输入到浏览器的工程目录中,使得浏览器的兼容性得到提升。此外,本发明还涉及区块链技术,所述前端文件可存储于区块链中。

附图说明

图1为本发明实施例中浏览器兼容性提升方法的第一个实施例示意图;

图2为本发明实施例中浏览器兼容性提升方法的第二个实施例示意图;

图3为本发明实施例中浏览器兼容性提升方法的第三个实施例示意图;

图4为本发明实施例中浏览器兼容性提升方法的第四个实施例示意图;

图5为本发明实施例中浏览器兼容性提升方法的第五个实施例示意图;

图6为本发明实施例中浏览器兼容性提升装置的一个实施例示意图;

图7为本发明实施例中浏览器兼容性提升装置的另一个实施例示意图;

图8为本发明实施例中浏览器兼容性提升设备的一个实施例示意图。

具体实施方式

本发明的技术方案中,获取浏览器的前端文件;将所述前端文件输入预设的语法分析器,通过所述语法分析器将所述前端文件解析为第一抽象语法树;遍历所述第一抽象语法树的所有节点,获取所述第一抽象语法树中各节点的代码实现版本;将所有所述第一抽象语法树的节点中代码实现版本高于预设版本的节点的代码用预设版本的代码替换,得到第二抽象语法树;遍历所述第二抽象语法树的所有节点,将所述第二抽象语法树的所有节点中的不兼容节点的代码用对应的兼容性代码替换;将代码替换后的第二抽象语法树输入所述语法分析器,通过所述语法分析器将所述第二抽象语法树转换为兼容性前端文件,并将所述兼容性前端文件输入所述浏览器的工程目录中。本提案通过将浏览器的前端文件进行词法分析和语法分析生成抽象语法树,并将抽象语法树中的节点按照兼容性规则进行替换,是的抽象语法树中的所有节点都具备兼容性,并将替换后的抽象语法树转换为兼容性前端文件,将兼容性前端文件输入到浏览器的工程目录中,使得浏览器的兼容性得到提升。此外,本发明还涉及区块链技术,所述前端文件可存储于区块链中。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中浏览器兼容性提升方法的第一个实施例包括:

101、将前端文件输入预设的语法分析器,通过语法分析器将前端文件解析为第一抽象语法树;

可以理解的是,本发明的执行主体可以为浏览器兼容性提升装置,还可以是终端或者服务器,具体此处不做限定。本发明实施例以服务器为执行主体为例进行说明。

需要强调的是,为保证上述浏览器的私密和安全性,上述前端文件可以存储于一区块链的节点中。

在本实施例中,所述前端文件为js(JavaScript)文件,js是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言,可以作为浏览器Web页面的脚本语言,JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格,常用来为浏览器的网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。

102、将前端文件输入预设的语法分析器,通过语法分析器将前端文件解析为第一抽象语法树;

在本实施例中,所述语法分析器主要为Babel编译器,语法分析器(Parser)通常是作为编译器或解释器的组件出现的,它的作用是进行语法检查、并构建由输入的单词组成的数据结构(一般是语法分析树、抽象语法树等层次化的数据结构)。语法分析器通常使用一个独立的词法分析器从输入字符流中分离出一个个的“单词”,并将单词流作为其输入。实际开发中,语法分析器可以手工编写,也可以使用工具(半)自动生成。babel是一个JavaScript编译器。宏观来说,它分3个阶段运行代码:解析(parsing)—将代码字符串转换成AST抽象语法树,转译(transforming)—对抽象语法树进行变换操作,生成(generation)—根据变换后的抽象语法树生成新的代码字符串。

在本实施例中,语法分析器将所述前端文件解析为第一抽象语法树的过程包括了词法分析和语法分析,其中词法分析主要是读取输入的前端文件的源代码的字符流后根据构词规则识别token(也称单词符号或符号),所述语法分析主要是是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”“语句”“表达式”等等,形成AST(AbstractSyntax Tree,抽象语法树)。

103、遍历第一抽象语法树的所有节点,获取第一抽象语法树中各节点的代码实现版本;

104、将所有第一抽象语法树的节点中代码实现版本高于预设版本的节点的代码用预设版本的代码替换,得到第二抽象语法树;

在本实施例中,所述预设版本的实现方式为ES5版本,其中ES表示ECMAScript,前端语言JavaScript主要分为3个部分,分别是核心语法,DOM和BOM,其中的核心语法就是指ECMAScript,它规定了语言的组成部分:语法、类型、语句、关键字、保留字、操作符、对象,前端语言JavaScript的更新,主要是ECMAScript版本的更新,而DOM和BOM的更新较少,因此,可以认为ECMAScript是JavaScript的参照,而JavaScript是ECMAScript的一个实现。本实施例中高于预设版本ES5的实现版本包括ES6、ES7等发布在ES5后面的版本,在实际应用中,尚未有一款完全支持ES6的JavaScript代理(无论是浏览器环境还是服务器环境),所以热衷于使用语言最新特性的开发者需要将ES6代码转译为ES5代码。

105、遍历第二抽象语法树的所有节点,将第二抽象语法树的所有节点中的不兼容节点的代码用对应的兼容性代码替换;

在本实施例中,由转至ES5的第二抽象语法树作为输入条件,读取第二抽象语法树的根节点类型,并检查节点的Type值是否匹配转换条件,若匹配则将兼容实现替换当前节点。

在本实施例中,通过语法分析器生成的抽象语法树存在许多层级,通过从最顶层开始,遍历所有的抽象语法树中的各节点,判断各节点的type值是否需要进行兼容性替换,实现将整个第二抽象语法树提供兼容性的功能。主要是通过语法分析器中的recast工具库,包括run:通过命令行读取js文件,并转化成ast以供处理,tnt:通过assert()和check(),可以验证ast对象的类型,visit:遍历ast树,获取有效的AST对象并进行更改,其中recast.visit用于AST节点遍历,需要注意的是操作函数声明,就使用visitFunctionDelaration遍历,操作赋值表达式,就使用visitExpressionStatement。只要在AST对象文档中定义的对象,在前面加visit,即可遍历。

106、将代码替换后的第二抽象语法树输入语法分析器,通过语法分析器将第二抽象语法树转换为兼容性前端文件,并将兼容性前端文件输入浏览器的工程目录中。

在本实施例中,通过将代码替换后的第二抽象语法树输入对比Polyfill在浏览器环境运行时检测API做兼容性处理,本方案在构建阶段完成对低版本浏览器的API修复,同时根据解析阶段入参来判断对应版本浏览器的语法支持程度,将例如IE8下不兼容的Getter、Setter等语法转换为对应版本兼容的实现方式。

在本实施例中,通过获取浏览器的前端文件;将所述前端文件输入预设的语法分析器,通过所述语法分析器将所述前端文件解析为第一抽象语法树;降低所述第一抽象语法树中实现方式高于预设版本的节点的版本,得到第二抽象语法树;遍历所述第二抽象语法树的所有节点,并将所有节点中的不兼容节点用兼容性代码替换;将代码替换后的第二抽象语法树输入所述语法分析器,通过所述语法分析器将所述第二抽象语法树转换为兼容性前端文件,并将所述兼容性前端文件输入所述浏览器的工程目录中。本提案通过将浏览器的前端文件进行词法分析和语法分析生成抽象语法树,并将抽象语法树中的节点按照兼容性规则进行替换,是的抽象语法树中的所有节点都具备兼容性,并将替换后的抽象语法树转换为兼容性前端文件,将兼容性前端文件输入到浏览器的工程目录中,使得浏览器的兼容性得到提升。此外,本发明还涉及区块链技术,所述前端文件可存储于区块链中。

请参阅图2,本发明实施例中浏览器兼容性提升方法的第二个实施例包括:

201、获取浏览器的前端文件;

本实施例中的步骤201与第一实施例中的步骤101相似,此处不再赘述。

202、将前端文件输入语法分析器,通过语法分析器对前端文件的源代码进行逐行扫描并分解成词法单元,其中,词法单元为编程语言中字符串形式的基本单词符号;

在本实施例中,主要通过词法分析和语法分析两个过程构建抽象语法树,其中,其中词法分析主要是读取输入的前端文件的源代码的字符流后根据构词规则识别token(也称单词符号或符号),所述语法分析主要是是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”“语句”“表达式”等等,形成AST(Abstract Syntax Tree,抽象语法树)。

203、将词法单元序列组合成数组;

在本实施例中,在词法分析过程中扫描源代码的每条语句,边扫描边进行分词,得到源代码的每条语句的词法单元。词法单元是语句的基本组成单元,词法单元可以是关键字、变量名、操作符、常量等,例如,获取到源代码为“const a=1,const b=a+1;”,扫描第一条语句“const a=1,”,首先会扫描到“const”,生成一个词法单元表示“const”为关键字;接着扫描到“a”,生成一个词法单元表示“a”为变量名;然后扫描到“=”,生成一个词法单元表示“=”为操作符;再扫描到常量“1”,生成一个词法单元表示“1”为常量;最后扫描到标点符号“,”,生成一个词法单元表示“,”为标点符号。词法分析过程中将语句“const a=1,”的各个词法单元组成数组{const a=1,}。类似地,词法分系统将语句“const b=a+1;”转换为由词法单元组成的数组{const b=a+1;}。

204、根据数组生成前端文件的第一抽象语法树;

205、遍历第一抽象语法树的所有节点,获取第一抽象语法树中各节点的代码实现版本;

206、将所有第一抽象语法树的节点中代码实现版本高于预设版本的节点的代码用预设版本的代码替换,得到第二抽象语法树;

207、遍历第二抽象语法树的所有节点,将第二抽象语法树的所有节点中的不兼容节点的代码用对应的兼容性代码替换;

208、将代码替换后的第二抽象语法树输入语法分析器,通过语法分析器将第二抽象语法树转换为兼容性前端文件,并将兼容性前端文件输入浏览器的工程目录中。

本实施例中的步骤205-208与第一实施例中的步骤103-106相似,此处不再赘述。

本实施例在上一实施例的基础上,详细地描述了生成抽象语法树的过程,通过将前端文件输入语法分析器,通过语法分析器对前端文件进行词法分析,将前端文件转换为由词法单元组成的数组;根据数组生成前端文件的第一抽象语法树,其中通过语法分析器对前端文件进行词法分析,将前端文件转换为由词法单元组成的数组主要是通过将前端文件输入语法分析器,通过语法分析器对前端文件的源代码进行逐行扫描;将源代码分解成词法单元,其中,词法单元为编程语言中字符串形式的基本单词符号;将词法单元序列组合成数组,本方法通过生成抽象语法树,实现对前端文件中不兼容性代码替换的效果。

请参阅图3,本发明实施例中浏览器兼容性提升方法的第三个实施例包括:

301、获取浏览器的前端文件;

302、将前端文件输入语法分析器,通过语法分析器对前端文件进行词法分析,将前端文件转换为由词法单元组成的数组;

303、根据数组对源代码进行语法分析,判断源代码的语法是否正确;

304、若是,则根据预设的源代码语言规范,生成与源代码对应的语法分析树;

305、调用语法分析树中各节点对应的节点对象创建方法,创建节点对象,根据节点对象生成第一抽象语法树;

在本实施例中,若源代码的语法错误,可以将错误信息反馈给用户,接收用户返回的修改后的源代码,对修改后的源代码进行词法分析,将修改后的源代码转换为由词法单元组成的数组,根据修改后的源代码的由词法单元组成的数组生成所述抽象语法树。例如,语法分析器对源代码“const a=1,const b=a+1;”进行分析,确定所述源代码的第一条语句“const a=1,”的语法错误,该语句的结尾应该是分号而不是逗号。语法分析器将错误信息反馈给用户,接收用户返回的修改后的源代码。例如,接收用户返回的修改后的源代码“const a=1;const b=a+1;”。词法分析器对修改后的源代码进行词法分析,得到修改后的源代码的由词法单元组成的数组,例如得到{const a=1;},{const b=a+1;},语法分析器根据修改后的源代码的由词法单元组成的数组生成所述抽象语法树。

在本实施例中,抽象语法树是在语法分析树的基础上建立的。其工作过程是依据自定义的抽象语法树的文法,解析分析语法树中的字符串并提取Token信息,同时根据各级不同的节点,如根节点、类节点类、方法节点类,分别调用各自对应的方法,创建节点对象,继而生成程序抽象语法树。

306、遍历第一抽象语法树的所有节点,获取第一抽象语法树中各节点的代码实现版本;

307、将所有第一抽象语法树的节点中代码实现版本高于预设版本的节点的代码用预设版本的代码替换,得到第二抽象语法树;

308、遍历第二抽象语法树的所有节点,将第二抽象语法树的所有节点中的不兼容节点的代码用对应的兼容性代码替换;

309、将代码替换后的第二抽象语法树输入语法分析器,通过语法分析器将第二抽象语法树转换为兼容性前端文件,并将兼容性前端文件输入浏览器的工程目录中。

本实施例在前实施例的基础上,详细描述了根据所述数组生成所述前端文件的第一抽象语法树的过程,通过根据所述数组对所述源代码进行语法分析,判断所述源代码的语法是否正确;若是,则根据预设的源代码语言规范,生成与所述源代码对应的语法分析树;调用所述语法分析树中各节点对应的节点对象创建方法,创建节点对象,根据所述节点对象生成第一抽象语法树,本方法通过生成抽象语法树,实现对前端文件中不兼容性代码替换的效果。

请参阅图4,本发明实施例中浏览器兼容性提升方法的第四个实施例包括:

401、获取浏览器的前端文件;

402、判断前端文件中的每个源代码的语句是否有缺失;

403、若源代码的语句有缺失,则舍弃源代码;

在本实施例中,在将前端文件输入语法分析器中前,还可以检查所述前端文件的源代码,判断所述前端文件中的每条源代码是否有缺失,当有缺失时,则确定该源代码的位置并发出告警,可以根据预设关键词判断所述源代码是否只有开始语句和结束语句。例如,可以判断所述源代码是否只包含开始语句的关键词和结束语句的关键词,若所述源代码只包含开始语句的关键词和结束语句的关键词,则确定所述源代码只有开始语句和结束语句,所述源代码的语句有缺失。

404、将前端文件输入预设的语法分析器,通过语法分析器将前端文件解析为第一抽象语法树;

405、遍历所述第一抽象语法树的所有节点,获取所述第一抽象语法树中各节点的代码实现版本;

406、将所有所述第一抽象语法树的节点中代码实现版本高于预设版本的节点的代码用预设版本的代码替换,得到第二抽象语法树;

407、遍历所述第二抽象语法树的所有节点,将所述第二抽象语法树的所有节点中的不兼容节点的代码用对应的兼容性代码替换;

408、将代码替换后的第二抽象语法树输入所述语法分析器,通过所述语法分析器将所述第二抽象语法树转换为兼容性前端文件,并将所述兼容性前端文件输入所述浏览器的工程目录中。

本实施例在前实施例的基础上,增加了对前端文件中的源代码进行检查的过程,通过判断所述多个源代码中的每个源代码的语句是否有缺失;若所述源代码的语句有缺失,则舍弃所述源代码,通过本方法,避免在进行兼容性代码转换时出现代码缺失的问题。

请参阅图5,本发明实施例中浏览器兼容性提升方法的第五个实施例包括:

501、获取浏览器的前端文件;

502、将前端文件输入预设的语法分析器,通过语法分析器将前端文件解析为第一抽象语法树;

503、遍历第一抽象语法树的所有节点,获取第一抽象语法树中各节点的代码实现版本;

504、将所有第一抽象语法树的节点中代码实现版本高于预设版本的节点的代码用预设版本的代码替换,得到第二抽象语法树;

505、读取第二抽象语法树的根节点,并将根节点作为当前结点;

506、判断当前节点的type值是否符合转换条件;

507、若符合转换条件,则根据预设的对应关系,获取当前节点的源代码对应的兼容性代码;

508、将兼容性代码替换当前节点的源代码,并跳转至步骤508中的检测当前节点是否在第二抽象语法树的节点底部;

509、若不符合转换条件,则检测当前节点是否在第二抽象语法树的节点底部的步骤;

510、若当前节点在第二抽象语法树的节点底部,则结束遍历;

511、若当前节点不在第二抽象语法树的节点底部,则读取下一节点作为当前节点,并跳转至判断当前节点的type值是否符合转换条件的步骤;

512、将代码替换后的第二抽象语法树输入语法分析器,通过语法分析器将第二抽象语法树转换为兼容性前端文件,并将兼容性前端文件输入浏览器的工程目录中。

在本实施例中,抽象语法树中的Type值,是业界内约定俗成的一组固定值,包括Variable Declaration、While Statement、With Statement等等,例如在抽象语法树的节点中为var a=1,需要替换为const a=1,此时确定var的Type值为VariableDeclaration,符合转换条件,代表命中var语句,此时只要将var通过固定语法替换为const即可,对第二抽象语法树中的所有节点进行遍历,确定抽象语法树中各节点的type至是否符合转换条件,并将符合转换条件的节点的代码进行转换,得到的新的抽象语法树中所有的节点都符合兼容性。

本实施例在前实施例的基础上,详细描述了遍历第二抽象语法树的所有节点,并将所有节点中的不兼容节点用兼容性代码替换的过程,通过读取第二抽象语法树的根节点,并判断根节点的type值是否符合转换条件;若符合转换条件,则将兼容性代码替换当前节点的代码,检测是否当前节点是否在第二抽象语法树的节点底部若当前节点在第二抽象语法树的节点底部,则结束遍历;若当前节点不在第二抽象语法树的节点底部,则读取下一节点判断type值是否符合转换条件;若不符合转换条件,则读取下一节点判断type值是否符合转换条件,通过本方法,使得抽象语法树中的所有节点中的代码具备兼容性,进而使得转换后的前端文件具备兼容性。

上面对本发明实施例中浏览器兼容性提升方法进行了描述,下面对本发明实施例中浏览器兼容性提升装置进行描述,请参阅图6,本发明实施例中浏览器兼容性提升装置一个实施例包括:

获取模块601,用于获取浏览器的前端文件;

输入模块602,用于将所述前端文件输入预设的语法分析器,通过所述语法分析器将所述前端文件解析为第一抽象语法树;

第一遍历模块603,用于遍历所述第一抽象语法树的所有节点,获取所述第一抽象语法树中各节点的代码实现版本;

替换模块604,用于将所有所述第一抽象语法树的节点中代码实现版本高于预设版本的节点的代码用预设版本的代码替换降低所述第一抽象语法树中实现方式高于预设版本的节点的版本,得到第二抽象语法树;

第二遍历模块605,用于遍历所述第二抽象语法树的所有节点,并将所述第二抽象语法树所有的所有节点中的不兼容节点的代码用对应的兼容性代码替换;

输出模块606,用于将代码替换后的第二抽象语法树输入所述语法分析器,通过所述语法分析器将所述第二抽象语法树转换为兼容性前端文件,并将所述兼容性前端文件输入所述浏览器的工程目录中。

需要强调的是,为保证上述浏览器的私密和安全性,上述前端文件可以存储于一区块链的节点中。

本发明实施例中,所述浏览器兼容性提升装置运行上述浏览器兼容性提升方法,所述浏览器兼容性提升方法包括:获取浏览器的前端文件;将所述前端文件输入预设的语法分析器,通过所述语法分析器将所述前端文件解析为第一抽象语法树;遍历所述第一抽象语法树的所有节点,获取所述第一抽象语法树中各节点的代码实现版本;将所有所述第一抽象语法树的节点中代码实现版本高于预设版本的节点的代码用预设版本的代码替换,得到第二抽象语法树;遍历所述第二抽象语法树的所有节点,将所述第二抽象语法树的所有节点中的不兼容节点的代码用对应的兼容性代码替换;将代码替换后的第二抽象语法树输入所述语法分析器,通过所述语法分析器将所述第二抽象语法树转换为兼容性前端文件,并将所述兼容性前端文件输入所述浏览器的工程目录中。本提案通过将浏览器的前端文件进行词法分析和语法分析生成抽象语法树,并将抽象语法树中的节点按照兼容性规则进行替换,是的抽象语法树中的所有节点都具备兼容性,并将替换后的抽象语法树转换为兼容性前端文件,将兼容性前端文件输入到浏览器的工程目录中,使得浏览器的兼容性得到提升。此外,本发明还涉及区块链技术,所述前端文件可存储于区块链中。

请参阅图7,本发明实施例中浏览器兼容性提升装置的第二个实施例包括:

获取模块601,用于获取浏览器的前端文件;

输入模块602,用于将所述前端文件输入预设的语法分析器,通过所述语法分析器将所述前端文件解析为第一抽象语法树;

第一遍历模块603,用于遍历所述第一抽象语法树的所有节点,获取所述第一抽象语法树中各节点的代码实现版本;

替换模块604,用于将所有所述第一抽象语法树的节点中代码实现版本高于预设版本的节点的代码用预设版本的代码替换降低所述第一抽象语法树中实现方式高于预设版本的节点的版本,得到第二抽象语法树;

第二遍历模块605,用于遍历所述第二抽象语法树的所有节点,并将所述第二抽象语法树所有的所有节点中的不兼容节点的代码用对应的兼容性代码替换;

输出模块606,用于将代码替换后的第二抽象语法树输入所述语法分析器,通过所述语法分析器将所述第二抽象语法树转换为兼容性前端文件,并将所述兼容性前端文件输入所述浏览器的工程目录中。

其中,所述输入模块602包括:

词法分析单元6021,用于将所述前端文件输入所述语法分析器,通过所述语法分析器对所述前端文件进行词法分析,将所述前端文件转换为由词法单元组成的数组;

语法树生成单元6022,用于根据所述数组生成所述前端文件的第一抽象语法树。

可选的,所述词法分析单元6021具体用于:

将所述前端文件输入所述语法分析器,通过所述语法分析器对所述前端文件的源代码进行逐行扫描并将所述源代码分解成词法单元,其中,所述词法单元为编程语言中字符串形式的基本单词符号;

将所述词法单元序列组合成数组。

可选的,所述语法树生成单元6022具体用于:

根据所述数组对所述源代码进行语法分析,判断所述源代码的语法是否正确;

若是,则根据预设的源代码语言规范,生成与所述源代码对应的语法分析树;

调用所述语法分析树中各节点对应的节点对象创建方法,创建节点对象,根据所述节点对象生成第一抽象语法树。

可选的,所述浏览器兼容性提升装置还包括判断模块607,所述判断模块607具体用于:

判断所述前端文件中的每个源代码的语句是否有缺失;

若所述源代码的语句有缺失,则舍弃所述源代码。

可选的,所述第二遍历模块605具体用于:

读取所述第二抽象语法树的根节点,并将所述根节点作为当前结点;

判断当前节点的type值是否符合转换条件;

若符合转换条件,则根据预设的对应关系,获取所述当前节点的源代码对应的兼容性代码;

将所述兼容性代码替换当前节点的源代码,并跳转至检测当前节点是否在所述第二抽象语法树的节点底部的步骤;

若不符合转换条件,则直接跳转至检测当前节点是否在所述第二抽象语法树的节点底部的步骤;

检测当前节点是否在所述第二抽象语法树的节点底部;

若当前节点在所述第二抽象语法树的节点底部,则结束遍历;

若当前节点不在所述第二抽象语法树的节点底部,则读取下一节点作为当前节点,并跳转至判断当前节点的type值是否符合转换条件的步骤。

本实施例在上一实施例的基础上,详细描述了各个模块的具体功能以及部分模块的单元构成,其中,输入模块包括词法分析单元和语法树生成单元,通过上述模块和单元,进行词法分析和语法分析生成抽象语法树,并将抽象语法树中的节点按照兼容性规则进行替换,是的抽象语法树中的所有节点都具备兼容性,并将替换后的抽象语法树转换为兼容性前端文件,将兼容性前端文件输入到浏览器的工程目录中,使得浏览器的兼容性得到提升。此外,本发明还涉及区块链技术,所述前端文件可存储于区块链中。

上面图6和图7从模块化功能实体的角度对本发明实施例中的中浏览器兼容性提升装置进行详细描述,下面从硬件处理的角度对本发明实施例中浏览器兼容性提升设备进行详细描述。

图8是本发明实施例提供的一种浏览器兼容性提升设备的结构示意图,该浏览器兼容性提升设备800可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)810(例如,一个或一个以上处理器)和存储器820,一个或一个以上存储应用程序833或数据832的存储介质830(例如一个或一个以上海量存储设备)。其中,存储器820和存储介质830可以是短暂存储或持久存储。存储在存储介质830的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对浏览器兼容性提升设备800中的一系列指令操作。更进一步地,处理器810可以设置为与存储介质830通信,在浏览器兼容性提升设备800上执行存储介质830中的一系列指令操作,以实现上述浏览器兼容性提升方法的步骤。

浏览器兼容性提升设备800还可以包括一个或一个以上电源840,一个或一个以上有线或无线网络接口850,一个或一个以上输入输出接口860,和/或,一个或一个以上操作系统831,例如Windows Serve,Mac OS X,Unix,Linux,FreeBSD等等。本领域技术人员可以理解,图8示出的浏览器兼容性提升设备结构并不构成对本申请提供的浏览器兼容性提升设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。

本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述浏览器兼容性提升方法的步骤。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统或装置、单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

相关技术
  • 浏览器兼容性提升方法、装置、设备及存储介质
  • 浏览器兼容性自动化测试方法、系统、设备及存储介质
技术分类

06120112359558