Fat R笔记……与减肥无关

Fat awful terrible Rubbish-bin

Sina blog的用户评论问题and..Opera的bug?

, , ,

研究了一下,sina blog是用ajax来获取用户评论的,在ajax部分作了针对不同浏览器的处理,然而在将获取到的html代码输出到页面时有一句:
<a name="comment" style="display:none;"/>

这个代码的目的是利用name属性创建一个anchor,但根据w3c的标准元素的end tag是必须的,也就是说,这种的写法是不标准的,应该写成 有趣的是Opera对这种不标准的tag的处理。我做了两个sample: http://files.myopera.com/Returner/blog/disappear.htm http://files.myopera.com/Returner/blog/1disappear.htm 可以看到,相同的代码直接写在html中,opera是会把它显示出来的。但如果是用innerHTML来动态插入,opera就会把内容隐藏了……似乎A标签中的style="display:none;"在动态插入时对后面的元素起了作用?同样的代码的两种解释行为,不知道是不是Opera的bug。 然而在FireFox中,无论直接写进html中还是用innerHTML来插入,效果都是一致的。但在第一个sample中,A元素后边紧接着的是一个DIV,这个DIV没有显示出来。而第二个sample中则是一个TABLE,这个TABLE却显示出来了。这就是为什么FireFox下能看到sina blog的用户评论。 IE下两个sample的行为更加一致,什么都不会显示。但我没研究在IE中那些用户评论最终是怎么显示出来的。 至于解决的办法,自然还是UserJS。需要做的事情很简单,在innerHTML插入之前将A标签正则替换为
<a name="comment" style=" "></a>
这里我把style去掉了,因为在opera中如果这个tag的style是display:none,Opera是不会用它作为一个anchor的,这就不能用#comment跳转到评论的位置了。 由于opera.defineMagicVariable只能覆盖全局变量,经过考虑最后还是选择对base.js中的output函数动手。output函数就是将ajax获取到的代码用innerHTML插入到指定元素中的“最终输出函数”。 UserJS代码如下:
// ==UserScript==
// @name             Show user comments in sina blog
// @author           Returner
// @include          http://blog.sina.com.cn/u/*
// ==/UserScript==

opera.defineMagicFunction(
  'output',
  function (real, oThis, _sHtml, _box)
  { _sHtml = _sHtml.replace(/(<a\s[^>]+)display\:none;([^>]+)\/>/ig,"$1 $2></a>");  	
    real.apply( oThis, arguments.slice(2) );}
);
或下载下面文件到Opera的UserJS目录 sinablogcomment.js 不过添加评论还是有点问题(尤其是使用代理服务器上网时),问题的根源在于验证码的图片没有及时更新,从而总是提示验证码错误。在不使用代理时刷多几次就好了,但使用代理时似乎总是刷新不了验证码图片,郁闷……
新浪可能修改过程序,原来的脚本会找不到新浪脚本里的output函数,于是real.apply时实际上会无限递归地调用自己,从而造成cpu占用率和内存占用率的飙升。 于是只好修改程序,直接把新浪的output函数写到脚本里。不过这样毕竟不是长久之计,新浪如果到时改了程序,脚本又要跟着改,只能算是暂时解决了问题…… 新的脚本在这里: sinablogcomment_v2.js

Opera blog升级……晕了,Word的自动编号功能

Comments

Csineneo Wednesday, March 21, 2007 6:02:47 PM

Thanks!

yumumao Wednesday, March 21, 2007 6:15:11 PM

试用中,不错,就是评论书写区会有一些空白段,还有就是验证码需要手动刷新。

易名gcy001 Tuesday, March 27, 2007 4:54:32 AM

  我下载了,不过不管用。我是放置在D:\Opera9\profile\sinablogcomment.js位置,但一点效果也没有?

Returner Wednesday, March 28, 2007 4:54:48 PM

你放错地方了
opera:config#UserPrefs|UserJavaScript
确保"User JavaScript"项选中了
"User JavaScript File"把.js文件放在这项中指定的位置
重新启动Opera,应该就可以了

okwebhelp Monday, April 9, 2007 4:37:25 AM

你好,用了你这个东西后,OPERA立即100%CPU,内存彪到撑死,你确定你这个不是显示全球部落格的回复么?

Returner Tuesday, April 10, 2007 8:02:12 AM

我也只能等访问新浪 blog的速度回复正常才能再做测试了……

okwebhelp Tuesday, April 10, 2007 12:29:24 PM

内存狂往上涨。。。。。。。。而且显示不出评论。。。。。。。。。。。

Write a comment

New comments have been disabled for this post.