|
Oct
14
|
|
|
Categories: WP/WP Plugins
| Tags: wordpress
| Views: 1,081
|
这简直是一段血泪史。。。。。。
一切都是折腾惹的祸!
事情是这样的:
一直以来我都想用上quick comments,因为每一次访客留言的时候,如果输入有误,系统就会直接调用wp-die,给出一个硬生生的报错页面,并且没有返回按钮,用浏览器返回之后,事先敲入的字符就会全部88。
在这款皮肤的版本还是3.X的时候,我试了一下,不行,效果是页面直接跳到了要载入的ajax结果页面,很是郁闷。后面这款皮肤出了4.X的新版本(先在这里感谢作者),作者在更新历史上明确地写上了支持quick comments,后来我对比看了一下,皮肤作者把留言form中的元素用jQuery作选择器的方式作了一下改变,简单地说,就是把 #commentlist 改成了 .commentlist(我不太确定是不是还有其他的原因作这个修改),其实这个在quick comments中是可以设置的。说得有点远了。。。
我激活了quick comments,可以和之前的效果一样,我不禁开始怀疑作者在更新日志里那么明确地写上支持quick comments到底是什么意思?明明说好了支持,怎么还是不行。。。我只好望ajax兴叹了。
不甘心,于是用firebug进行调试(在提交留言的时候显示有js错误)。提示是
I(this).block 没有定义
真是奇了怪了,quick comments的作者在加载script的时候加载了jquery.blockUI啊,我以为是这个js文件没有加载上,于是我在这个js文件中加了一句话。什么,你问哪句话?就是这句:
alert(12345);
结果在重载页面的时候就听到“叮咚”一声,弹出来12345!其实我之前已经在Web developer里看到了jquery.blockUI.min.js已经加载了。只是不死心而已。
但是我继续不死心,在这个文件的最下面又加了一句话:
alert(jQuery['blockUI']);
结果是叮咚一声,出来一个undefined!天哪,我真是要抓狂了,上面定义了(function($){ $.blockUI = function(){…} })(jQuery); 接着在下面alert居然是undefined.
我真的有点手足无措了。
。。。。。。
我找到了一个用quick comments的博客,把它的源代码打开看了一下,发现blockUI和scrollTo的调用在比较靠前的地方,于是我尝试着改add_action的priority(作者采用这个来加载js,priority可以用来设置执行的优先级),仍然未果,实际上调用顺序并没有改变。
一怒之下(其实早就怒了),我把这个页面另存为,把所有的js文件都下载下来,在本地运行。并在头部加了一段js:
1 | jQuery(function(){ alert('jQuery['blockUI']') }); |
依然是undefined,于是我在上面这段代码之上又加了一段代码:
1 | (function($){ $.blockUI = function(){...} })(jQuery); |
就是把blockUI自己定义一下,这下就出现了自己定义的内容,于是我明白了,在调用jquery.blockUI的地方到上面这段代码之间有一些js代码这blockUI给“洗”掉了。
然后,我把jquery.blockUI往不同的地方移,最后终于发现,洗掉它的是wp-codebox调用的jquery.js(这之前jquery.js已经被调用了)!到这才发现是wp-codebox惹的祸。。。万恶的wp-codebox。三下五除二,把wp-codebox中调用jquery.js的地方注释掉,以为问题解决了。
当回到首页的时候,发现wp-codebox又无法正常了,因为缺少了jquery.js!首页不需要quick comments,所以也没有调用jquery.js。
于是把wp-codebox中注释掉的地方改了一下,如果jQuery存在,则不调用jquery.js,反之则调用之。
1 2 3 4 5 6 | $hHead .= " <script type=\"text\/javascript\">\n";<br /> $hHead .= " if(typeof jQuery === \"undefined\"){\n";<br /> $hHead .= " document.write('<script language=\"javascript\" type=\"text/javascript\" src=\"".get_bloginfo('wpurl')."/wp-includes/js/jquery/jquery.js\"><\/script>');\n"; //这里是修改后动态调用,modified by pwwang<br /> $hHead .= " }\n";<br /> $hHead .= " </script>\n";<br /> //$hHead .= " <script language=\"javascript\" type=\"text/javascript\" src=\"".get_bloginfo('wpurl')."/wp-includes/js/jquery/jquery.js\"></script>\n"; //这里是直接调用 |
至此,wp-codebox与quick comments终于和睦共存。。。
在此也要提醒那些写插件的朋友们,如果要用到jquery,在调用jquery.js文件之前,请先做一下检测!


都是技术类的喽… 偶尔也写点自己的故事嘛…
@Rock:曾经和一位朋友玩笑似地说道,你从我的博客可以看到我的生活,如果哪天,我的文字不再碎碎念,专心于技术的话,那说明我很幸福。因为人们总是喜欢把自己的幸福藏着掖着,而把自己的不幸诉诸于世。
技术博客,也有专属读者的嘛
至少可以在写的过程中学习,不错的。
@ifender:享受写的过程
@ifender:
你没使用quick comments?
我的主题用qc提交评论出来个javascript的对话框?
怎么回事
对话框是什么内容?