雕版机厂家
免费服务热线

Free service

hotline

010-00000000
雕版机厂家
热门搜索:
行业资讯
当前位置:首页 > 行业资讯

探索eWebEditor在IE新版本下按钮失效问题的解决方法

发布时间:2020-02-20 01:45:24 阅读: 来源:雕版机厂家

硅谷网12月9日文 据《硅谷》杂志2012年第18期刊文称,eWebEditor是一个基于浏览器的在线HTML编辑器,在客户端操作的用户不需要额外去安装任何的组件,便可以在直观、可视化的图形界面下创建或发布网页内容,然而在浏览器升级到IE8甚至更高版本后,老版的eWebEditor会出现在这些浏览器下按钮失效的情况。主要探讨eWebEditor在高版本的IE或其它浏览器下按钮失效的解决方法。

0引言

eWebEditor是一个基于浏览器的在线HTML编辑器,普通用户可以通过浏览器在线生成或是编辑网页内容,由于其操作界面和传统的Windows应用软件操作界面风格相似,且简单实用、非常容易上手,因此,eWebEditor是当前很受用户欢迎的网站内容管理及发布的必备工具之一。然而,随着浏览器的不断升级,出现了老版的eWebEditor在这些浏览器下按钮失效的情况,使用户无法顺利完成网页的发布。笔者将在下文中探索解决这一问题的方法。

1探索过程

1.1按钮失效原因分析

让我们打开eWebEditor编辑器工作时调用的关键文件editor.js,在其代码列表中发现有这样的一串代码:

if(element.YUSERONCLICK)eval(element.YUSERONCLICK+"anonymous()");

这串代码表示的是当用户点击eWebEditor编辑器上的按钮时,将会激活此按钮所对应的函数,然而笔者发现,在IE8正式版中实际上已经对anonymous()函数限制使用了,因此这个受限制的anonymous()函数便是引起按钮失效的根本原因。既然已经找到了原因,下面便可以对症下药了。

1.2解决方法

方法一:既然在IE8中已经限制了anonymous()函数,那我们只需将其修改为在IE8中能实现对应功能的函数即可,而在IE8中对应功能所支持的函数即onclick(event)函数,因此,我们很自然地会想到用onclick(event)函数去替换anonymous()函数。但是,替换之后,新的问题又出来了,由于在IE7及以前的版本中却是不支持onclick(event)函数的,所以这种简单的替换,会使eWebEditor编辑器中的按钮在IE7及以下浏览器中无法正常工作。为了eWebEditor能够在IE8及之前的版本中都能使用,我们可以在语句列表中加上判断IE版本的语句,使得在不同的浏览器版本中,可以实现调用不同的函数的功能;当然如果你希望你的eWebEditor编辑器在其它类型的浏览器中也能正常使用,比如在遨游浏览器里也能使用,那么,我们还可以在语句列表中再加了个判断语句。综上所述,最终的参考解决方式便很明朗了,只需用下面所示的代码替换前文中提到的代码行即可:

if(navigator.appVersion.match(/MSIE(7|8)\./i)!=null

navigator.appVersion.match(/MAXTHON/i)=='MAXTHON')

{

if(element.YUSERONCLICK)eval(element.YUSERONCLICK+"onclick(event)");

}else{

if(element.YUSERONCLICK)eval(element.YUSERONCLICK+"anonymous()");

}

该方法引入版本检测的方法,针对不同的IE版本,调用不同函数名称来解决eWebEditor在不同版本的浏览器下调用函数不相同的情况,确实是很好地解决了当下eWebEditor编辑器按钮失效的问题。但如果我们将眼光放得更远一点,发现这个方法还是有一定的局限性的,IE的后续版本必然会不断地涌出并流行,这要的话,当新的版本流行起来时,我们又需要加入新的IE版本号来判断了;另一方面,如果新版本的IE又修改了函数名的话,那么判断语句将会更加复杂了。

方法二:在方法一中,我们已经意识了到版本号判断所带来的麻烦,如果可以避开版本号的判断,方法将会简单很多。不检测IE的版本号的方法,可以通过try/catch来实现,借助try/catch我们模糊区分版本号,代码可改写成:

if(element.YUSERONCLICK)

{

try

{

eval_r(element.YUSERONCLICK+"onclick(event)");

}

catch(e){

eval_r(element.YUSERONCLICK+"anonymous()");

}

}

本方法虽然省略了IE版本号的判断,对代码进行了瘦身,但还是会面临方法一中所提到的另一个问题,即当新版本的IE中又出现变更函数名的情况时,则又需要在代码中嵌套一层try/catch了。

方法三:前面所列的两种方法从一定程度上来说,较好地解决了下eWebEditor编辑器按钮失效的问题,但也寸在一定的缺陷,首先:代码偏多,其次:无法应对IE升级后有可能出现的变更函数名的问题,那么,实际上还是没能很好地彻底解决问题。我们仔细分析这段有问题的代码就会发现,其实element.YUSERONCLICK属性里存放的是一段function的定义,alert一下就会看到代码字符串如下:

functionanonymous()

{

//这里是具体的执行代码

}

完整地来看,就是用eval来执行一个js代码片段如下:

functionanonymous()

{

//这里是具体的执行代码

}

anonymous()

由于IE浏览器的的升级变化,导致anonymous()函数名发生变化,但如果我们在代码里把函数名作为常量字符串来使用时,这种变化就不能适应了。当然也可以用提取字符的方法把函数名从代码段里分割出来,然后拼凑起代码段来执行,虽然这个方法是没什么问题,也可以达到目的,但代码写起来将会比较复杂,不够简洁。其实利用JS的动态特性,我们完全可以在不必知道函数名也不必动态提取函数名的情况下直接正确的执行该函数最终代码,这会比源代码还节省代码字节。因此,我们只需将函数名替换成一对括号就可以解决了:

if(element.YUSERONCLICK)eval("("+element.YUSERONCLICK+")()");

该方法不但大大缩减了代码,而且还可以直面IE浏览器升级后可能出现的函数名变更问题,也就是说,无论函数名怎么变,只要IE浏览器不取消这个功能函数,那么这段代码都会发挥它的效用,我们将可一劳永逸地根本解决这个按钮失效的问题。

1.3补充说明

前文中提到的三种解决方法都是在不改变当前eWebEditor版本的情况下实行的,确实可以解决当下燃眉之急,能使eWebEditor编辑器有效地工作起来。当然,我们也可以在有条件的情况下,采取一些其它的方法来解决之一为题,比如:升级当前所采用的eWebEditor编辑器的版本,使它与浏览器的升级同步起来;或者可以选用其它的较先进的可视化编辑器,比如:KindEditor。

KindEditor是一套开源的HTML可视化编辑器,能够兼容当下的各种主流浏览器,比如:IE浏览器、Firefox浏览器、Opera浏览器、Safari浏览器、Chrome浏览器等。KindEditor2.0于2006年7月首次发布面世,它使用JavaScript编写,可以与ASP程序、JAVA程序、.NET程序、PHP程序等实现无缝式接合,因此,它在各种互联网应用中崭露头角,被广泛地应用于商城、博客、论坛、CMS、Wiki、电子邮件等互联网应用上,领先的技术和出色的用户成为了KindEditor不断扩大编辑器市场占有率的两把利器,目前它已经成为国内最受欢迎的编辑器之一。

2小结

eWebEditor编辑器在IE新版本下按钮失效的现象是由于anonymous()函数在IE新版本下被限制引起的,因此文中提到的三种解决方法都是围绕此函数的修改展开的。实际上,我们除了可以在不改变eWebEditor编辑器版本的情况下,做出修改外,也可以将手头的eWebEditor编辑器的版本进行升级,这样不但可以应对浏览器升级后出现的问题,新版本的编辑器也可以为我们带来更好的用户体验;初次之外,我们还可以选用其它先进的HTML可视化编辑器来完成网页发布的工作。

(张家界航院院级课题编号ZHKT2011-006)

(责任编辑:硅谷网·)

上一篇:硅谷杂志:浅析民航气象数据库系统的资料入库

下一篇:基于RSA的中考志愿填报和录取管理系统设计或可实现 对“探索eWebEditor在IE新版本下按钮失效问题的解决方法”发布评论

济南面罩密封性测试仪

高压试压机

济南平台试压泵