在bug中最多是JavaScript脚本错误,样式错误,功能错误等;对于cs代码引起的错误,几乎在开发时就修改了。而脚本的错误,样式的问题,是需要考虑浏览器,运行环境,部署是否完整等多个条件,导致修复的难度和再现的难度都比cs代码要困难的多。
具体问题:
Javascript脚本: 在系统中,js是不可缺少的。而js的开源库更是少不了。本系统使用了 Jquery库/相关的UI库/插件库:这几个本身是没有问题的,兼容性也不错。
1)My97Datepicker:时间控件。在其中遇到的一个 “脚本权限”问题中,就是因为这个插件与Jquery冲突造成的。
2)其他脚本。 多种脚本的冲突导致了很多问题。这是在设计之初,没有考虑到功能的多样性,而在开发中随行而发,兴致所至则代码成。
脚本问题:万恶的Iframe加载: 在系统中,模拟多标签的浏览器做了一个可打开关闭的Tab多页面切换区。采用了一个控件。 apTabs是一个采用Prototype框架开发发HTML/JavaScript Tab控件。支持Tab横向滚动隐藏,以便在一个比较狭窄的空间中显示更多的Tab标签页。支持通过Ajax,iFrame加载内容。ApTabs在系统中,没打开一个tab会在客户端机器上产生5-8M的内存占用,而且关闭后就不会释放。nnd,打开20个界面后,再关闭再打开客户机器有1G内存就这么无声无息的没了。 原因:这个问题也是属于经典问题。采用Div等方式把Iframe给显示出来,然后再关闭div的隐藏属性,这样是无法释放Iframe的占用资源的。 需要在关闭div之前,把iframe的资源GC了才可以。 方法:在关闭tab时,循环该Tab的所有Element,包括iframe,设置:thisObject.removeNode(true); 设置清理后,如果是IE浏览器可以使用:CollectGarbage();进行GC。其他浏览器不兼容。