zoukankan      html  css  js  c++  java
  • EasyUI 兼容 IE6 方法总结.doc

    EasyUI 兼容 IE6 方法总结

    1.     背景

    1.1 项目介绍

    安徽XXXXXX服务平台从 7 月低开始框架搭建,前端UI框架确定使用目前功能比较完善的Jquery EasyUI(没有考虑到客户方目前使用的浏览器大部分都是IE6,项目设计初期的不严谨)。11 初基本功能开发完成,期间一直致力于功能的实现和数据的一致性的核查,并没有太多关注浏览器的兼容性和性能问题。经过在客户现场几次演示的结果,暴露出严重的性能问题和兼容性问题,在IE6 下,系统基本不能运行。于是开始着手调整这些问题。

    1.2 框架介绍

    优点:JQuery EasyUI 是目前功能比较齐全的一套 UI 框架,为我们提供了大多数UI控件的使用,如:accordion,combobox,menu,dialog,tabs,tree,validatebox,window等,方便开发人员使用,提高开发效率,正是基于这些考虑,项目设计的时候决定使用该框架。

    缺点:界面兼容程度不够,不过大部分都发生在IE6下,在 IE7+ 、FF等浏览器中显示正常。

    2.     详细分析

    2.1 页面重复加载问题

    1) 问题现象

    点击左侧的菜单,右侧页面被加载了两次。

    2) 问题分析

    1修改前部分代码

    $(document).ready(function(){    

           $('#header').panel({href: ctx +'/view/common/header.jsp',onLoad:function(){

                  $("div.topMenu li a").click(function(){                                  

                         $(this).addClass("topMenu-item-current");

                         $(this).parent().siblings().children().removeClass("topMenu-item-current");

                         if(this.id == "js") {

                                $('#main').panel("refresh",ctx +"/view/busi/busi_index.jsp");

                                addLeftClick();

                         }else if(this.id == "cl") {

                                …………..

                         }

                  });

           }});

    });

    function addLeftClick(){

           $('#main').panel({  

            onLoad:function(){  

                  $(".leftMenu li a").click(function(){

                         $(this).addClass("selected");

                         $(this).parent().siblings().children().removeClass("selected");   

                  });

                  }  

           });

    };

    2修改后部分代码

    $(document).ready(function(){    

                  $('#header').panel({href: ctx +'/view/common/header.jsp',onLoad:function(){

                         $("div.topMenu li a").click(function(){                           

                                $(this).addClass("topMenu-item-current");

                                $(this).parent().siblings().children().removeClass("topMenu-item-current");

                               

                                if(this.id == "js") {

                                       addLeftClick(ctx +"/view/busi/busi_index.jsp");

                                }else if(this.id == "cl") {

                                       …………….

                                }

                         });

                        

                  }});

           });

           function addLeftClick(url){

                  $('#main').panel({  

                   onLoad:function(){  

                         $(".leftMenu li a").click(function(){

                                $(this).addClass("selected");

                                $(this).parent().siblings().children().removeClass("selected");

                         });

                         }  

                  }).panel("refresh",url);

           };

    代码实现的功能是点击主菜单的时候,刷新下面的 panel 控件,加载新页面,并且默认选择左侧菜单的第一个。

    修改前的代码是先刷新页面,再添加 onLoad 监听事件,导致panel 刷新两次,页面重复加载,修改后先添加 onLoad 监听事件,再加载页面。

    2.2 加载速度慢的问题

    1) 问题现象

    在 IE6 下,点击左侧的菜单,要5s 左右才开始刷新右侧页面,出现右边长时间空白。

    2) 问题分析

    1、页面开始使用

    $('#myPanel').panel({

    fit:true,

    content:'<iframe scrolling="auto" frameborder="0"  src="'+url+'" style="100%;height:100%;"></iframe>'

    });

    将 iframe 作为 panel的内容面板加载,panel 刷新本身需要花费一些时间,调整后直接用 iframe,将 panel 去掉

    2、右侧iframe  的页面大量使用了easyui 的控件,大部分都是以class 样式的形式使用

    1对于 easyui 的时间控件DateBox 和DateTimeBox,IE6 在渲染的时候,很耗费时间,导致页面长时间显示空白,最后更换成新的时间控件My97DatePicker ,页面响应时间提高 3s 左右

    2对于页面上的 ComboBox 控件,在 select 组件上加了  class="easyui-combobox",页面初始加载的时候就开始渲染这些组件,导致页面响应缓慢,最后将easyui 的样式和属性全部去掉,在页面加载完成的方法里再渲染,加载后台数据的同时渲染页面,提高效率。

    2.3 页面闪烁问题

    1) 问题现象

    在 IE6 下,点击左侧的菜单,有几个菜单点击后,整个页面会全部刷白,出现如下的情况,短时间的闪烁感觉。

    2) 问题分析

    1页面开始使用原生 HTML 标签 select ,而且没有用 ComboBox 组件渲染。

    IE6 在加载 select 组件时导致页面闪烁,最后全部用 ComboBox 组件。

    2页面上的DataGrid 组件的分页栏

    这个分页栏的“页面显示数据条数”,也是采用 select 实现的,而且控件默认是显示该功能的,最后修改在公共 js 里加入

    $.fn.pagination.defaults.showPageList = false;

    将控件的默认设置改为不显示。

    2.4 页面不加载,提示 js 错误问题

    1) 问题现象

    在 IE6 下,页面加载是提示js 错误,页面停止加载。

    2) 问题分析

    1 修改前部分代码

    $('#gridTableB').datagrid( {

           url:'',

           method : 'post',

           loadMsg : '数据载入中,请稍等...',

           pagination : true,

           rownumbers : true,

           columns : [ [{

                  field : 'gesBsmAlarm.occurOrgidName',

                  title : '区域',

                  width : 35,

                  sortable : true,     //请注意,引起错误的位置,多了一个 逗号

           }, {

                  field : 'gesBsmAlarm.equipModel',

                  title : '告警类型',

                  width : 60,

                  sortable : true

           }] ]

    });

    Easyui 的 DataGrid 控件的属性最后一项,不能写一个 “,”,这在 IE7+ 和FF 等浏览器下没有问题,在 IE6  下报js 错误。

    2.5 DataGrid 上自定义按钮的导出不反应问题

    1) 问题现象

    在 IE6 下, DataGrid 的分页自定义按钮上的导出报表功能不起作用,并且后台程序会报错,前台无任何反应。

    2) 问题分析

    1修改前代码

     $(function(){

           $('#custCircuitTable').datagrid({

                  url : '',

                  pagination : true,

                  rownumbers : true,

                  columns : [ [ {

                                field : 'str0',

                                title : '省中心',

                                align : 'center',

                                width : 80,

                                styler : changeColor

                         } ] ]

           });

           var pager = $('#custCircuitTable').datagrid('getPager');

           pager.pagination( {

                  buttons : [ {

                         title : 'ddddd',

                         iconCls : 'icon-export',

                         handler : function() {

                                exportExcel();

                         }

                  } ]

           });

    });  

    Easyui 对 DataGrid 的分页控件的自定义按钮解析时,解析成下图的形式

    其中的 a 标签的 href="javascript:void(0)",在 IE6 下,当点击这个链接时,IE6中会先执行a 中的javascript:void(0) ,之后IE6 认为请求已经结束,其实真正的请求在 exportExcel(); 方法里执行了,并且请求了后台的数据,后台执行完成之后,返回数据到前台,发现请求已经被关闭,然后后台就报错了。

    最后代码修改后全部不再采用DataGrid的自定义分页按钮,用 LinkButton 实现,并给 href=”#”。

    2.6 依旧存在的问题

    1) 问题现象

    在 IE6 下,快速定位资源客户树上的客户,速度很慢

    2) 问题分析

    IE6 执行js 的选择元素和创建对象的方法速度很慢,但是在树形结构中,查找一个节点的时候需要大量选择元素和创建对象,导致方法执行缓慢,目前尚未找到好的解决方案。

    3.     总结

    通过端到端系统的实战,对 easyui 框架有了更深的认识,个人使用的一些感受:

    1遇到问题并且没有好的解决思路的时候,大致浏览一下官方的文档,或许你现在遇到的问题,框架的开发人员都已经给你解决好了,不必劳神了。

    2遇到问题并且查找了半天没有找到原因的时候,将你的代码缩减到最简单,对比官方给的Demo,找到有哪些差异,逐个排除。

    3遇到问题实在解决不了的时候,你需要深入理解框架的实现原理,对每一个控件的工作方式、控件处理数据的逻辑大致了解,查看控件最终在页面的展示形式,判断自己的数据是否符合要求。

  • 相关阅读:
    Python3小练习2——(汉诺塔的移动),递归
    Python3小练习1——(ax*x+ bx + c = 0的解)
    SSRS数据导出Excel多出空白列
    ETL 压缩文件(makecab) 并邮件发送
    关于System.Web.Script.Serialization命名空间的引用
    如何通过VIsual Studio安装程序修改VS2017?
    如何其他服务器能够连接自己本机的数据库?
    SSAS表格模型部署问题
    表格模型——安装实例
    Leetcode 76题:最小覆盖子串 滑动窗口经典题
  • 原文地址:https://www.cnblogs.com/liujicai/p/3290986.html
Copyright © 2011-2022 走看看