Categories: WP/WP Plugins | Tags: | 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文件之前,请先做一下检测!

 

这篇文章来自 迷途知返(PWWANG.COM), 转载请注明出处。 版权说明

  1. October 17th, 2009 at 23:11
    Reply | Quote | #1

    都是技术类的喽… 偶尔也写点自己的故事嘛… ;)

    • October 18th, 2009 at 00:41
      Quote | #2

      @Rock:曾经和一位朋友玩笑似地说道,你从我的博客可以看到我的生活,如果哪天,我的文字不再碎碎念,专心于技术的话,那说明我很幸福。因为人们总是喜欢把自己的幸福藏着掖着,而把自己的不幸诉诸于世。

  2. October 18th, 2009 at 16:26
    Reply | Quote | #3

    技术博客,也有专属读者的嘛

    至少可以在写的过程中学习,不错的。

    • October 18th, 2009 at 19:05
      Quote | #4

      @ifender:享受写的过程

    • December 20th, 2009 at 01:59
      Quote | #5

      @ifender:

      你没使用quick comments?

  3. March 12th, 2010 at 18:00
    Reply | Quote | #6

    我的主题用qc提交评论出来个javascript的对话框?
    怎么回事

;) :| :x :twisted: :roll: :oops: :o :mrgreen: :lol: :idea: :evil: :cry: :arrow: :P :D :?: :? :) :( :!: 8O 8)

你可以使用@somebody:开头, 来邮件通知somebody你回复了他的留言(用户名区分大小写).