新起点2012

日期: 2012-01-01 分类: 生活、记录

今天是2012的第一天,心中总结过往,眼睛与心一直望向前方,不管2011是如何,都已经过去,那就更加积极的面对2012吧!

感谢所有出现在我生命中的亲朋好友、过客陌生人等,因为有你们我才不是一个人,新起点2012更加让人期待!

牛角猛顶了: 0 » 次 tags: ,

uncaught exception: [CKEDITOR.editor] The instance “xxxx” already exists.

日期: 2011-08-16 分类: Javascript

  今天在往项目中添加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的使用,有如下总结:

  1. 出现“uncaught exception: [CKEDITOR.editor] The instance “xxxx” already exists.”这样的错误,表名是实例的id冲突了;
  2. 对于要用ckeditor的textarea如果有id这个属性存在,那么即使传递给CKEDITOR.replace()的是”name”或者”class”,注册到CKEDITOR.instances[]中的却还是id名;
  3. 如果textarea中没有id属性,那么注册到CKEDITOR.instances[]中的就是”name”,即使还有”class”属性注册进去的还是”name”属性;

IE中DOM操作的一些疑问?

日期: 2011-08-14 分类: Javascript
  1. 今天发现在IE下,当我向dom中插入一段html,然后却没法把这段插入进去html当作DOM来操作,而在firefox下确实没有问题的,在DOM中插入html后可以立马将其当作DOM来操作,不知这是否是IE自身的问题呢?有没有解决的办法呢?寻求解答中……

关于这个问题,刚才经过和一个群里的朋友讨论和测试,在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操作代码,虽然有点长,但是却还是那么的优雅,而且有效。

对于这种情况有如下总结:

  1. 有时候遇到问题以为是浏览器兼容问题,例如我之前以为的IE和firefox下对新插入DOM的不同对待情况,实际上却可能不是,需要换换思维再想;
  2. 不可迷信框架,例如jQuery,虽然不知刚才的问题是否为bug,但是在我的实际使用中,的确存在了问题;
  3. 在使用框架时候出现了问题,可以尝试下原生的js或者DOM操作代码,或许管用,就这个例子而言,是有效的管用的;
牛角猛顶了: 0 » 次 tags: ,

IE:由于出现错误 c00ce56e 而导致此项操作无法完成。

日期: 2011-08-14 分类: Javascript

  今天在写代码的时候,用到ajax异步获取数据,在firefox 3.6下一切正常,而在各个版本的IE之下却会报错“由于出现错误 c00ce56e 而导致此项操作无法完成。”。

先说一些前提条件:

  1. 因为firefox是我写代码和做测试的浏览器,所以一般都会首先保证在它下边的正确性,firefox下一切看起来都那么正常;
  2. js代码是基于jQuery的;
  3. 使用了异步加载的方式加载各个js类库;
  4. 请求方式是‘GET’,返回格式‘html’;

  由于之前的工作阶段性的完成,所以准备在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那里少了一个横杠,加上就恢复了正常。

根据这个问题可以总结如下经验:

  1. firefox的容错能力比IE更强,以HTML5的设计思想来说,firefox表现得更好,对于这样的容错能力,是否会造成安全隐患,由于未经过测试,所以暂时不知;
  2. 尽量保持程序的各种编码的一致性,否则可能会出现不可预知的错误,推荐使用utf-8;
牛角猛顶了: 0 » 次 tags: ,

网站重新开启,留念!

日期: 2011-08-11 分类: 生活、记录

  为了纪念网站重新开启,下边就这段时间的关闭说一些闲言碎语。

  前一段时间,由于备案的问题,网站一度被关闭。

  由于生活和工作方面的原因就一直搁置在那里了,生活方面主要是内心比较消沉缺乏做任何事情的动力,回家就不想动手不想思考,颓废中度过;工作方面也因为新工作比较忙没法抽时间在上班时候做些什么。

  现在由于工作上的事情还算比较得心应手,而且对于生活重新充满了动力。所以前些天重新换了一个服务商,重新备案,一共花去了4天时间,2天节假日,2个工作日,总的来说备案的效率还是很高的,之所以这么高的原因,我想最主要是我之前已经备案过一个网站(那是在去年过年那段时间,前前后后大概20多天吧),现在备案只是挂靠在那上边,所以速度很快,看来备案只要拿到了备案号,以后再备案就会快很多。

  经过重新开通空间,重新备案,程序转移,数据库备份转移….等一些列处理,网站终于在昨天中午重新启动了。本来应该昨天就可以写下这个说明,但是因为一直忙着写一个CMS系统,所以就忘记了,今天补上。

  这个CMS上个月底就开始架构了,现在整体结构基本完成,各个功能模块也在陆续完成之中….在此先贴下地址,后台地址:

  http://www.toobull.com/5lab/backend/

牛角猛顶了: 2 » 次

Zen Cart官网访问不了的真正原因

日期: 2011-04-17 分类: Zencart

  最近在网上发现很多说ZenCart官网无法访问的信息,而且本人在某些ISP服务商的网段下也无法访问,所以在网上搜了一下原因,在此贴出一篇比较有价值的博文,上边是从官网得到的答复,真是让人心痛的原因啊,对国内部分SEO真的是太失望了!(从网上的信息来看,绝大部分人以为是ZenCart官网封锁了所有的国内IP,实际上不是所有的,应该是那些发垃圾信息比较多的网段,而那些网段比较广,所以只有很少部分网段可以正常访问。)

ZenCart官网不能访问的真正原因图:

为什么ZenCart屏蔽来自中国的IP

  看到从官网得来的这个解释,各位是不是得好好的自我反省下?为了国内开源购物车得更好发展,为了大家不会失去Zen Cart这么优秀的开源购物车,每个人都应该从自身开始好好约束下行为,这样才是大家的长远利益,大家懂的。

原文链接:http://www.sqlstudy.com/article/cannot-visit-zen-cart-site-from-china.html

牛角猛顶了: 0 » 次 tags: