今天是2012的第一天,心中总结过往,眼睛与心一直望向前方,不管2011是如何,都已经过去,那就更加积极的面对2012吧!
感谢所有出现在我生命中的亲朋好友、过客陌生人等,因为有你们我才不是一个人,新起点2012更加让人期待!
今天是2012的第一天,心中总结过往,眼睛与心一直望向前方,不管2011是如何,都已经过去,那就更加积极的面对2012吧!
感谢所有出现在我生命中的亲朋好友、过客陌生人等,因为有你们我才不是一个人,新起点2012更加让人期待!
今天在往项目中添加ckeditor的时候,出现一些异常,在firebug下显示的错误是:
uncaught exception: [CKEDITOR.editor] The instance "xxxx" already exists.
出现这个错误的原因是之前对于某个textarea的ckeditor编辑器已经实例化了,实例化的id被注册到了CKEDITOR.instances[]这个数组之中,在页面没有刷新的情况下,重新添加一个ckeditor实例的时候,如果新添加的这个实例的注册id和已经存在的实例的id相同,那么就会出现如上那个冲突。
那么如何解决呢?
根据上边那一段说明的原因,避免这种情况有两种解决办法,其一,修改新添加的实例的id让这个id是独一无二的,避免冲突;其二,将CKEDITOR.instances[]这个数组之中冲突的id注销,然后再添加。对于第二种解决办法,可参考如下代码:
function loadEditor(id){
var instance = CKEDITOR.instances[id];
if(instance){
CKEDITOR.remove(instance);
}
CKEDITOR.replace(id);
}
对于我遇到的这个问题,我准备是用第二种解决办法,然而按照如上方法却无论如何无法解决,错误依旧存在…..所以就开始了我2个小时的调试之路了。我的错误如下:
uncaught exception: [CKEDITOR.editor] The instance "theContent" already exists.
textarea的代码如下:
<textarea class="articleContent" name="articleContent" id="theContent"></textarea>
相关处理的js代码片段如下:
addCkeditor(theContent.eq(0).attr('name'));
//添加ckeditor编辑器;
function addCkeditor(name){
var editor = CKEDITOR.instances[name];
if(editor) editor.destroy(true);
CKEDITOR.replace(name);
}
见如上代码可知,虽然按照如上第二种发放,销毁了实例,但是却还是一直提示错误。为什么呢?经过查找各种资料,去是完全无果。回到程序继续调试,最后却发现,由于之前的粗心而忽略了一点重要线索:“The instance “theContent” already exists.”这句户中的实例id-”theContent”。由于我之前的一个认识误区,以为我传到CKEDITOR.replace()的是name,那么注册到CKEDITOR.instances[]中的就是这个name,但是,实际情况却并非如此。回过去头再去看看textarea的代码,发现我传递给CKEDITOR.replace()的名称是”articleContent”,而注册到CKEDITOR.instances[]中的却”theContent”,所以,即使我destroy了,但是却没有销毁到本应销毁的那个实例!然后我将代码改进一下,然后一切都恢复正常,改进代码如下:
改进后的textarea代码:
<textarea id="articleContent" name="articleContent" flag="theContent"></textarea>
改进后的js代码如下:
var theContent = $('textarea', container).filter(function(){
return $(this).attr('flag') === 'theContent';
});
if(theContent.length === 1)
addCkeditor(theContent.eq(0).attr('name'));
//添加ckeditor编辑器;
function addCkeditor(id){
var editor = CKEDITOR.instances[id];
if(editor) editor.destroy(true);
CKEDITOR.replace(id);
}
经过改进之后,一切正常了。
关于我自己遇到的实际问题,关于ckeditor的使用,有如下总结:
关于这个问题,刚才经过和一个群里的朋友讨论和测试,在IE中插入DOM后可以直接操作是没问题的,可见如下代码:
<script>
document.body.innerHTML='<div id="abc"></div>';
alert(document.getElementById('abc'));
</script>
对于我自己的实际问题,我之前使用的jQuery的DOM操作,在IE下,内容是插入,但是插入内容之后的所有动作都无法执行,不仅仅是DOM的操作,还包括普通的alert操作,代码见如下:
$('#container').html(data);
或者
$(data).appendTo('#container');
这两个在IE下,虽然都能正常插入内容,之后动作却无法执行,究其原因应该是在内容插入后返回出错(这个属于猜测,结合之前一篇对于ajax返回的处理中firefox和IE的不同处理,这种猜测我觉得也是有道理的。)。
具体是什么错误却不得而知,这个得读jQuery里边相关的代码才行,暂时没有时间于此,此问题现在此mark等他日再来深究,或许是jQuery1.6.2的一个小bug也不一定。
在此还要说明一下的是,一切操作在firefox都是正常。
虽然具体原因不是很明了,但是经过测试后发现,若把以上jQuery代码改成如下原生的DOM操作,则IE和firefox下皆为正常,代码如下:
document.getElementById('container').innerHTML = data;
如上代码是原生的DOM操作代码,虽然有点长,但是却还是那么的优雅,而且有效。
对于这种情况有如下总结:
- 有时候遇到问题以为是浏览器兼容问题,例如我之前以为的IE和firefox下对新插入DOM的不同对待情况,实际上却可能不是,需要换换思维再想;
- 不可迷信框架,例如jQuery,虽然不知刚才的问题是否为bug,但是在我的实际使用中,的确存在了问题;
- 在使用框架时候出现了问题,可以尝试下原生的js或者DOM操作代码,或许管用,就这个例子而言,是有效的管用的;
今天在写代码的时候,用到ajax异步获取数据,在firefox 3.6下一切正常,而在各个版本的IE之下却会报错“由于出现错误 c00ce56e 而导致此项操作无法完成。”。
先说一些前提条件:
由于之前的工作阶段性的完成,所以准备在IE下看看是否正常,一看之下,有点郁闷,没有反应..数据没有显示出来。
然后在IE下,F12,发现IE下请求数据的过程没有问题,而且在控制面板中也获取到了数据,但是当我使用$(‘#id’).html(data);往DOM中插入数据时,完全无反应;
继续调试,然后我在$.ajax请求的error参数选项中,alert其传递给回调函数的errorThrown参数时,获取到了如下错误:“由于出现错误 c00ce56e 而导致此项操作无法完成。”,这个很关键,因为弹出的错误是有代码的,所以这是一个有迹可循的错误。
这里顺便说一句,在firefox下ajax请求是返回success的,而IE下是返回error的。
根据这个错误提示,在网上搜索了相关的答案,找到比较有用的说法是编码不一致。经过查找发现,原来我html页面的编码是utf-8,而在我的bootstrap程序中设置的是“header(“Content-type: text/html;charset=utf8″);”,utf8那里少了一个横杠,加上就恢复了正常。
根据这个问题可以总结如下经验:
为了纪念网站重新开启,下边就这段时间的关闭说一些闲言碎语。
前一段时间,由于备案的问题,网站一度被关闭。
由于生活和工作方面的原因就一直搁置在那里了,生活方面主要是内心比较消沉缺乏做任何事情的动力,回家就不想动手不想思考,颓废中度过;工作方面也因为新工作比较忙没法抽时间在上班时候做些什么。
现在由于工作上的事情还算比较得心应手,而且对于生活重新充满了动力。所以前些天重新换了一个服务商,重新备案,一共花去了4天时间,2天节假日,2个工作日,总的来说备案的效率还是很高的,之所以这么高的原因,我想最主要是我之前已经备案过一个网站(那是在去年过年那段时间,前前后后大概20多天吧),现在备案只是挂靠在那上边,所以速度很快,看来备案只要拿到了备案号,以后再备案就会快很多。
经过重新开通空间,重新备案,程序转移,数据库备份转移….等一些列处理,网站终于在昨天中午重新启动了。本来应该昨天就可以写下这个说明,但是因为一直忙着写一个CMS系统,所以就忘记了,今天补上。
这个CMS上个月底就开始架构了,现在整体结构基本完成,各个功能模块也在陆续完成之中….在此先贴下地址,后台地址:
最近在网上发现很多说ZenCart官网无法访问的信息,而且本人在某些ISP服务商的网段下也无法访问,所以在网上搜了一下原因,在此贴出一篇比较有价值的博文,上边是从官网得到的答复,真是让人心痛的原因啊,对国内部分SEO真的是太失望了!(从网上的信息来看,绝大部分人以为是ZenCart官网封锁了所有的国内IP,实际上不是所有的,应该是那些发垃圾信息比较多的网段,而那些网段比较广,所以只有很少部分网段可以正常访问。)
ZenCart官网不能访问的真正原因图:
看到从官网得来的这个解释,各位是不是得好好的自我反省下?为了国内开源购物车得更好发展,为了大家不会失去Zen Cart这么优秀的开源购物车,每个人都应该从自身开始好好约束下行为,这样才是大家的长远利益,大家懂的。
原文链接:http://www.sqlstudy.com/article/cannot-visit-zen-cart-site-from-china.html