2023年6月21日发(作者:)
2013年第22卷第l2期 http://www.c-S-a.org.cn 计算机系统应用 长期以来,对于DOM[ 。】部分的兼容性问题,传 统的解决方案有如下2种: ①完全按照W3C的DOM规范里的API来编写程 序.此方法的局限是,很多标准的API对于国内习惯于 某一浏览器开发的人员来说,不熟悉并且不愿学习. ②使用能力检测.也叫做对象检测,指的是在执 行代码之前检测某个脚本对象或者方法是否存在,而 不是依赖于你对哪个浏览器具有哪些特性的了解.如 果必需的对象或方法存在,那么说明浏览器能够使用 它,并且代码也可以按照预期执行.例子如下: if(document.al1){ //IE兼容的部分代码 }else{ //Firefox版本的代码 ) 对于现有的代码来说,以上两种方案有一个共同 的缺点就是按照上面的方法重新开发程序工作量太大 成本太高,难以实现自动化.此类现有代码的问题在软 件工程学科上属于遗留系统 的改造问题.对网页代码 的改造的目的是要将不能够跨浏览器的网页代码改造 为能够跨浏览器的,同时要保持原有的功能不变.在遗 留系统的改造中,重构是能够达到将已有的代码进行 改造,同时又不改变已有功能性的目的.故我们提出了 基于重构的方式对非兼容网页代码进行改造,同时又 不用人工改动现有代码.由于网页本身是以W3C DOM 模型规范作为指导,本文提出的针对非规范网页代码 的改造,以DOM模型规范作为指导,以符合W3C规范 为目标,即基于模型的网页代码自动规范化的重构. 2基于DOM模型规范的重构 在W3C组织制定针对网页代码DOM规范前,各 浏览器通过使用一种叫做DHTML ̄ ](Dynamic HTML) 技术来操纵文档、样式等特性.DHTML为嵌入到网页 中的脚本语言提供了一个编程接口。但由于各种浏览 器提供的接口各不相同,其应用和发展受到了很大的 制约.DOM(Document Object Mode1)起源于DHTML, 虽然W3C组织早在1998年1O月就提出了DOM的正 式建议(Recommendation),但到目前为止,这个建议 被一些主流浏览器实施的程度差异很大. DOM是一套平台和语言独立的接口,允许通过 程序或者脚本动态地访问和更新文档的内容、结构和 样式.DOM规范分成了不同的级别,以当前常用的 DOM Level 2为例,DOM2推荐标准分成了以下6个 不同的规范:DOM2 Core、DCIM2 HTML、DOM2 Events、DOM2 Style、DOM2 Traversal and Range、 DOM2 Views.其中D0M2 HTML是专门针对HTML 网页文档设计的,通过将整个HTML页面文档规划 成由多个相互连接的节点构成的文档,文档中的每 个部分都可以看成是一个节点(Node)的衍生物.这样 的一个节点集合看成是一棵节点树(Tree),也就是浏 览器载入网页文档后得到的HTMLDocument对象. 通过这个对象,开发者可以对文档的内容和结构拥 有强大的控制力,并且使用DOM提供的API在文档 树中遍历、删除、添加、修改和替换节点,由此生成 丰富的应用形式.浏览器厂家由于为了提高竞争力 等原因,在对DOM规范的实现上,并没有完全遵守 W3C制定的标准.通过对DOM解析文档后得到 Document对象统计发现,对Document对象的方法的 部分兼容性测试如表1所示. 表1各浏览器的DOM兼容性支持 方法名 IE 6.0 FF W3CDOM addEventListener N Y Level 3Core adoptNode N Y Level 3Core attachEvent Y N clear N Y Levell close Y Y Level1 compareDocumentPosition N Y Level 3Core createAttribute Y Y Level1 createAttributeNS N Y Level 2Core createCDATASection N Y Level2 Core createCornment Y Y Leve11 createDocumentFragment Y Y Levell createElement Y Y Level1 对于已有的不符合DOM模型规范的代码,使用 重构【6】的方式能够使不符合规范的代码规范化,实现 代码的跨浏览器兼容性.若是使用手工的方式对代码 进行重构的话不仅费时费力,而且容易出错.以遵守 DOM模型规范为目标的自动化重构工具能够提供很 好的重构效果和用户体验. 要构造的自动重构工具面向的是存在兼容性问题 的网页代码。其目标是遵守D0M模型规范.浏览器是 通过嵌入的脚本语言实现对DOM模型的操纵,发现 不兼容的代码则首先要实现对嵌入脚本进行解析.想 要从进行解析后的嵌入脚本中发现不兼容的部分,则 需要有已知的不兼容列表.重构工具所需的程序数据 库在生成符合DOM规范的代码时经常用到.以上这 Research and Development研究开发197 计算机系统应用 http://www.c-S—a.org.cn 2013年第22卷第12期 些是构造自动化重构工具的必要条件.则重构工具的 整个工作过程如下图2所示. 图2重构工具工作过程 3 构造基于DOM模型规范的自动重构工具 在我们的具体实现中,采用的是对嵌入到网页中 的JavaScript[7J脚本代码进行解析并发现和纠正不兼容 部分的.针对具体的JavaScript脚本,构造一个语言解 析器【 ,采用了ANTLR[ l(Another Tool for Language Recognition)实现.ANTLR能够接受文法语言描述,能 够依据给出的语法规则生成相应的基于Java、C++或 c≠}的词法分析器或语法分析器代码,极大地提高了自 行编写分析器的效率.ANTLR接受LL(k)文法.LL(k)文 法书写的限制是1:不能用左递归.2:向前看的字符数 最多是k个,当编译程序递归k次仍无法找到匹配的产 生式时,则句子识别失败.重构工具的程序数据库在以 网页文档作为输入时,就是需要从网页文档解析出 DOM模型出来,使用解析后得到的Document对象,使 用DOMAPI可以轻松地对整个网页内容进行遍历、查 询等.使用开源的HTML解析器NekoHTML可以把网 页解析出一棵DOM树.NekoHTML是一个简单地 HTML扫描器和标签补偿器ll0](tag balancer)。使得程序 1 98研究开发Research and Development 能解析HTML文档并用标准的XML接口来访问其中的 信息.这个解析器能够扫描HTML文件并“修正”许多 作者(人或机器)在编写HTML文档过程中常犯的错误. NekoHTML能增补缺失的父元素、自动用结束标签关 闭相应的元素。以及不匹配的内嵌元素标签. NekoHTML的开发使用了Xerces Native Interface(XNI), 后者是Xerces2的实现基础. 使用NekoHTML作为预处理器对输入的网页文 档预处理得到DOM树,使用ANTLR作为JavaScript 代码解析器解析JS代码,使用解析过程中获取的上下 文信息和浏览器兼容性对照表则可以识别并对非兼容 代码予以纠正,起到了重构的作用.非DOM兼容的代 码重构后完全符合W3C的DOM模型规范,且易维 护、易扩充、代码更加健壮. 4实验结果 为测试对网页代码的重构效果,特别发起了一个 针对中国银行网上银行进行重构的项目,通过构造自 动重构工具,对含有较多浏览器兼容问题的中国银行 网银的网页代码进行测试.为了方便用户测试,该项 目将重构工具部署在一台中间服务器上,当用户设置 代理服务器为中间服务器即可.实验结果为,当使用 重构工具后,在多种系统包括特别是龙芯上的Linux 系统下用多种浏览器如Firfox等都可以十分顺利登陆 并且使用中国银行网上银行的几乎全部页面,详情可 参照本项目的网站http://www.w3cbank.org/webartk. 5 总结 本文通过分析当前我国许多网站网页代码出现的 浏览器兼容性问题的原因 提出了针对非规范的网页 代码进行自动规范化来对网页代码实现重构的做法. 自动重构后的网页代码,遵照DOM模型,符合W3C 规范。从而实现了网页跨浏览器的兼容性.最后通过 实现一个基于DOM模型的自动规范化重构工具对网 页代码进行重构.使用网页自动重构工具将会对现有 网页文档的规范化有非常积极的意义,以较小的代价 实现了对现存的不规范Web应用遗留系统的规范化实 现跨系统跨浏览器的兼容性.因此本文提出的方案对 于解决国内广泛存在的w_eb应用跨浏览器兼容性问题 具有非常强的实用价值和推广价值. (下转第187页)
2023年6月21日发(作者:)
2013年第22卷第l2期 http://www.c-S-a.org.cn 计算机系统应用 长期以来,对于DOM[ 。】部分的兼容性问题,传 统的解决方案有如下2种: ①完全按照W3C的DOM规范里的API来编写程 序.此方法的局限是,很多标准的API对于国内习惯于 某一浏览器开发的人员来说,不熟悉并且不愿学习. ②使用能力检测.也叫做对象检测,指的是在执 行代码之前检测某个脚本对象或者方法是否存在,而 不是依赖于你对哪个浏览器具有哪些特性的了解.如 果必需的对象或方法存在,那么说明浏览器能够使用 它,并且代码也可以按照预期执行.例子如下: if(document.al1){ //IE兼容的部分代码 }else{ //Firefox版本的代码 ) 对于现有的代码来说,以上两种方案有一个共同 的缺点就是按照上面的方法重新开发程序工作量太大 成本太高,难以实现自动化.此类现有代码的问题在软 件工程学科上属于遗留系统 的改造问题.对网页代码 的改造的目的是要将不能够跨浏览器的网页代码改造 为能够跨浏览器的,同时要保持原有的功能不变.在遗 留系统的改造中,重构是能够达到将已有的代码进行 改造,同时又不改变已有功能性的目的.故我们提出了 基于重构的方式对非兼容网页代码进行改造,同时又 不用人工改动现有代码.由于网页本身是以W3C DOM 模型规范作为指导,本文提出的针对非规范网页代码 的改造,以DOM模型规范作为指导,以符合W3C规范 为目标,即基于模型的网页代码自动规范化的重构. 2基于DOM模型规范的重构 在W3C组织制定针对网页代码DOM规范前,各 浏览器通过使用一种叫做DHTML ̄ ](Dynamic HTML) 技术来操纵文档、样式等特性.DHTML为嵌入到网页 中的脚本语言提供了一个编程接口。但由于各种浏览 器提供的接口各不相同,其应用和发展受到了很大的 制约.DOM(Document Object Mode1)起源于DHTML, 虽然W3C组织早在1998年1O月就提出了DOM的正 式建议(Recommendation),但到目前为止,这个建议 被一些主流浏览器实施的程度差异很大. DOM是一套平台和语言独立的接口,允许通过 程序或者脚本动态地访问和更新文档的内容、结构和 样式.DOM规范分成了不同的级别,以当前常用的 DOM Level 2为例,DOM2推荐标准分成了以下6个 不同的规范:DOM2 Core、DCIM2 HTML、DOM2 Events、DOM2 Style、DOM2 Traversal and Range、 DOM2 Views.其中D0M2 HTML是专门针对HTML 网页文档设计的,通过将整个HTML页面文档规划 成由多个相互连接的节点构成的文档,文档中的每 个部分都可以看成是一个节点(Node)的衍生物.这样 的一个节点集合看成是一棵节点树(Tree),也就是浏 览器载入网页文档后得到的HTMLDocument对象. 通过这个对象,开发者可以对文档的内容和结构拥 有强大的控制力,并且使用DOM提供的API在文档 树中遍历、删除、添加、修改和替换节点,由此生成 丰富的应用形式.浏览器厂家由于为了提高竞争力 等原因,在对DOM规范的实现上,并没有完全遵守 W3C制定的标准.通过对DOM解析文档后得到 Document对象统计发现,对Document对象的方法的 部分兼容性测试如表1所示. 表1各浏览器的DOM兼容性支持 方法名 IE 6.0 FF W3CDOM addEventListener N Y Level 3Core adoptNode N Y Level 3Core attachEvent Y N clear N Y Levell close Y Y Level1 compareDocumentPosition N Y Level 3Core createAttribute Y Y Level1 createAttributeNS N Y Level 2Core createCDATASection N Y Level2 Core createCornment Y Y Leve11 createDocumentFragment Y Y Levell createElement Y Y Level1 对于已有的不符合DOM模型规范的代码,使用 重构【6】的方式能够使不符合规范的代码规范化,实现 代码的跨浏览器兼容性.若是使用手工的方式对代码 进行重构的话不仅费时费力,而且容易出错.以遵守 DOM模型规范为目标的自动化重构工具能够提供很 好的重构效果和用户体验. 要构造的自动重构工具面向的是存在兼容性问题 的网页代码。其目标是遵守D0M模型规范.浏览器是 通过嵌入的脚本语言实现对DOM模型的操纵,发现 不兼容的代码则首先要实现对嵌入脚本进行解析.想 要从进行解析后的嵌入脚本中发现不兼容的部分,则 需要有已知的不兼容列表.重构工具所需的程序数据 库在生成符合DOM规范的代码时经常用到.以上这 Research and Development研究开发197 计算机系统应用 http://www.c-S—a.org.cn 2013年第22卷第12期 些是构造自动化重构工具的必要条件.则重构工具的 整个工作过程如下图2所示. 图2重构工具工作过程 3 构造基于DOM模型规范的自动重构工具 在我们的具体实现中,采用的是对嵌入到网页中 的JavaScript[7J脚本代码进行解析并发现和纠正不兼容 部分的.针对具体的JavaScript脚本,构造一个语言解 析器【 ,采用了ANTLR[ l(Another Tool for Language Recognition)实现.ANTLR能够接受文法语言描述,能 够依据给出的语法规则生成相应的基于Java、C++或 c≠}的词法分析器或语法分析器代码,极大地提高了自 行编写分析器的效率.ANTLR接受LL(k)文法.LL(k)文 法书写的限制是1:不能用左递归.2:向前看的字符数 最多是k个,当编译程序递归k次仍无法找到匹配的产 生式时,则句子识别失败.重构工具的程序数据库在以 网页文档作为输入时,就是需要从网页文档解析出 DOM模型出来,使用解析后得到的Document对象,使 用DOMAPI可以轻松地对整个网页内容进行遍历、查 询等.使用开源的HTML解析器NekoHTML可以把网 页解析出一棵DOM树.NekoHTML是一个简单地 HTML扫描器和标签补偿器ll0](tag balancer)。使得程序 1 98研究开发Research and Development 能解析HTML文档并用标准的XML接口来访问其中的 信息.这个解析器能够扫描HTML文件并“修正”许多 作者(人或机器)在编写HTML文档过程中常犯的错误. NekoHTML能增补缺失的父元素、自动用结束标签关 闭相应的元素。以及不匹配的内嵌元素标签. NekoHTML的开发使用了Xerces Native Interface(XNI), 后者是Xerces2的实现基础. 使用NekoHTML作为预处理器对输入的网页文 档预处理得到DOM树,使用ANTLR作为JavaScript 代码解析器解析JS代码,使用解析过程中获取的上下 文信息和浏览器兼容性对照表则可以识别并对非兼容 代码予以纠正,起到了重构的作用.非DOM兼容的代 码重构后完全符合W3C的DOM模型规范,且易维 护、易扩充、代码更加健壮. 4实验结果 为测试对网页代码的重构效果,特别发起了一个 针对中国银行网上银行进行重构的项目,通过构造自 动重构工具,对含有较多浏览器兼容问题的中国银行 网银的网页代码进行测试.为了方便用户测试,该项 目将重构工具部署在一台中间服务器上,当用户设置 代理服务器为中间服务器即可.实验结果为,当使用 重构工具后,在多种系统包括特别是龙芯上的Linux 系统下用多种浏览器如Firfox等都可以十分顺利登陆 并且使用中国银行网上银行的几乎全部页面,详情可 参照本项目的网站http://www.w3cbank.org/webartk. 5 总结 本文通过分析当前我国许多网站网页代码出现的 浏览器兼容性问题的原因 提出了针对非规范的网页 代码进行自动规范化来对网页代码实现重构的做法. 自动重构后的网页代码,遵照DOM模型,符合W3C 规范。从而实现了网页跨浏览器的兼容性.最后通过 实现一个基于DOM模型的自动规范化重构工具对网 页代码进行重构.使用网页自动重构工具将会对现有 网页文档的规范化有非常积极的意义,以较小的代价 实现了对现存的不规范Web应用遗留系统的规范化实 现跨系统跨浏览器的兼容性.因此本文提出的方案对 于解决国内广泛存在的w_eb应用跨浏览器兼容性问题 具有非常强的实用价值和推广价值. (下转第187页)
发布评论