6
7
2011
0

GM 脚本:Ubuntu 中文论坛自动登录 & 展开代码

其实自动登录的部分很早就写了的,因为应用于同样的站点,所以就放一起了。

自动登录就不就了,据说是论坛一直就有的 bug。不过现在似乎好了,已经很少遇到需要重新登录的情况。代码展开嘛,是这样子的。Ubuntu 中文论坛支持使用[name]...[/name]的BBCode来调用 Geshi 插件进行语法高亮。不过高亮的代码却总是收缩起来,只能看到开头几行,要看完整的要么用滚动条,要么点击“展开”链接。Perl 的小骆驼书上有一句话我印象深刻:当程序超过一屏时,bugs 数量会突增。

// ==UserScript==
// @name           Ubuntu中文论坛自动登录
// @namespace      http://lilydjwg.is-programmer.com/
// @description    Ubuntu中文论坛自动登录
// @include        http://forum.ubuntu.com.cn/ucp.php?mode=login*
// @include        http://forum.ubuntu.com.cn/viewtopic.php*
// @include        http://forum.ubuntu.org.cn/ucp.php?mode=login*
// @include        http://forum.ubuntu.org.cn/viewtopic.php*
// ==/UserScript==

window.addEventListener("load", function(){
  setTimeout(function(){
    var links = document.querySelectorAll('a[onfocus]');
    if(links){
      var evt = document.createEvent("MouseEvents");
      evt.initMouseEvent("click", true, true, window,
			 0, 0, 0, 0, 0, false, false, false, false, 0, null);
      for(var i=0, len=links.length; i<len; i++){
        if(links[i].innerHTML == '展开'){
          links[i].dispatchEvent(evt);
        }
      }
    }
    if(document.querySelector('input[name=autologin]')){
      document.querySelector('input[name=autologin]').checked = true;
      document.querySelector('input[name=login]').click();
    }
  }, 1000);
}, false);

点击这里安装。可以到这个页面测试。

Category: 火狐 | Tags: GreaseMonkey javascript 火狐
4
16
2011
10

换火狐4了

既然决定换 Arch 了(虽然至今仍未换过去),终将放弃火狐3.6,于是终于地,我用上了火狐4。我的火狐4是从这里下载的国际版。一直很不喜欢中国版的火狐。

之所以没在第一时间使用火狐4,除了插件兼容性的担心外,我还很不喜欢火狐4的UI。标签栏和状态栏学Chrome、菜单学Opera就算了,打开附加组件栏后这算什么啊?下边明明有那么多的空间,状态栏非要浮在它上面!

对于自己的配置,我一向很保守,因此,我启动火狐4的命令是:

~/soft/firefox/firefox -P --no-remote

创建了一个新的 profile。我并没有把之前的 profile 复制过去,因为我觉得用了好几年的配置,是时候清理下了。

我先是尝试了下Pentadactyl这个vimperator的新分支,很快就放弃了,直接原因是,我没有找到能够用的使用拼音的 hint 插件。我可不想为了 follow 一个全中文的链接而伸手去按数字,不方便。根本原因还是不习惯 hint 这种方式,不想放弃自己已经养成的并没有任何明显问题的习惯。

于是再创建一个 profile,开始逐个安装自己要的插件。还好重要的插件都支持火狐4。弄完时安装了40个插件,一个炫彩风格。其中有一个插件是我不再留恋火狐3.6的重要原因——Status-4-Evar。我就知道喜欢火狐以前的状态栏的不止我一个,果然已经有了现成的插件。而且,这个插件还包含了Fission的功能——地址栏进度条,虽然填充的时候把地址栏的边框给遮住了。

最后,还有五个插件我想要,但是不支持火狐4:

  • Link Status,在状态栏显示链接是否已加为书签,以及如果访问过,上次访问的时间
  • FireRainbow,Firebug 的脚本高亮
  • CacheViewer,查看缓存文件的。除了从缓存中找媒体文件外,我还用它来删除因非正常关机等原因导致坏掉的缓存文件
  • History Submenus,将历史记录菜单按天分成子菜单
  • MR Tech Toolkit,增强附加组件管理页面,包括导出列表等

另外,还遭遇了一个bug:在安装若干插件后,打开附加组件管理页面,会停止响应,从 strace 的信息来看是死锁了。不过既然是新版,只出了一个bug还是比较好理解的。想当初,刚转到Linux下的时候,那个火狐各种崩溃……至于配置插件,对于没有在附加组件栏之类的地方提供打开“选项”对话框的插件,只好看它的源码然后像这样访问啰:

chrome://imagetweak/content/prefs.xul
chrome://textlink/content/pref/prefDialog.xul

火狐4新增的标签页分组功能很好用,可以把与当前工作不相关的网页放到另外的组,以免像Chrome那样让标签页挤满标签栏,所以Tree Style Tab也不需要了。而且,当一个分组里的标签页太多而分组占用的区域很小的时候,火狐也处理得很好。注意到截图下方中央有个按钮,点一下就会弹出一个大的区域,展示被“叠放”在一起的标签以便操作。在分组管理界面中也支持中键关闭、双击新建,那些功能很明显的按钮我就不说了。不过我在想,如果它支持Awesome或者Subtle那样的平铺,再加上多个工作区(或者边界不局限于窗口边界),那样就更好了。

最后要说一下的是,火狐原先位于地址栏的RSS订阅按钮没了,说是用的人少,不想让它占地方(Orz....)。办法有二,要么点“书签”按钮,然后在下拉菜单里找,要么定制工具栏,拖个RSS图标到工具栏上,并不能放到地址栏里。而且这样的话,即使网页没有提供RSS功能,RSS图标依旧显示,这才是真正的占用宝贵的空间呢!


2011年4月29日更新:

今天火狐提示尽快升级到 4.0.1。升级之后,附加组件管理页面终于恢复正常了!

Category: 火狐 | Tags: 火狐
11
6
2010
2

privoxy与火狐智能地址栏两者兼得

privoxy是一款强大的代理调度器,看到muzuiget同学的介绍我就心动了,由于比较忙所以前两天才开始尝试,很快就发现了一个问题:直接在火狐地址栏里输入关键字会转到privoxy的“找不到域名”的错误页。

依我的推测,火狐总是尝试解析用户在地址栏输入的字符串,当解析失败时就尝试添加.com这样的后缀,然后尝试向Google查询,或者返回一个最接近的结果,或者返回Google搜索页面。(所以,我非常讨厌垃圾电信的114广告,使得任何原本不能解析的域名都解析到它的广告页了。)

在使用HTTP代理之后,火狐无法得知域名解析是否成功,因为代理在出错时返回了出错页面。这让我这个重试依赖她的地址栏的火狐迷郁闷了一天,最终(部分地)解决了此问题。

privoxy果然强大,出错页都是可以自定义的,默认这些模板在配置目录的templates目录下,很容易猜到处理域名解析失败的文件是no-such-domain。于是我在改了下其外观的同时,先是加上搜索功能:

<p>
    This is often a temporary failure, so you might just
    <a href="@protocol@@hostport@@path@">try again</a>,
    or <a href="https://encrypted.google.com/search?hl=zh-CN&q=@hostport@">Google @host@</a>.
</p>

这样还不行,不光得点一下,而且只能跳转到Google的搜索页。想到Google有个“手气不错”按钮,于是利用之:

var abar = function(){
  if(document.referrer) return;
  var host = "@host@";
  if(host.indexOf('.')<0 || host.indexOf(' ')>-1){
    document.title = "跳转中...";
    window.location = "https://encrypted.google.com/search?hl=zh-CN&q="+host+"&btnI=1";
  }
};
abar();

将这段代码加到<head>后即可实现输入关键字后自动使用Google的“手气不错”服务跳转到接近的页面,或者是Google搜索页面。

但测试几次后发现,这样还有问题:如果输入中文,将搜索其punycode而不是中文了。比如在地址栏输入“测试”,回车之后会搜索“xn--0zwm56d”,进而跳转到http://www.iana.org/domains/root/db/xn--0zwm56d.html。看来需要用Javascript解punycode了。Google下,在stackoverflow看到了一个实现,还是放弃版权的~只是我没发现怎么才能让privoxy的错误页调用本地的外部Javascript文件,所以直接把代码嵌进去了,这让我这个喜欢代码整洁的人有点不爽。。。

var abar = function(){
  if(document.referrer) return;
  var host = punycode.ToUnicode("@host@");
  if(host.indexOf('.')<0 || host.indexOf(' ')>-1){
    document.title = "跳转中...";
    window.location = "https://encrypted.google.com/search?hl=zh-CN&q="+host+"&btnI=1";
  }
};
abar();

按说这样的设计是跨浏览器的,于是我测试了下Google Chrome,发现其并不买帐,输入看起来不像域名的字符串后,Chrome直接进到搜索页面。。。。还是火狐好啊~~

Category: 火狐 | Tags: javascript 火狐 privoxy
7
22
2010
5

GM 脚本:和WebQQ的滚动标题栏说再见

作为一名中国的Linuxer,我没能像一些幸福者那样摆脱QQ,尽管我一直在见缝插针地推广Gtalk,但收效甚微。在相当长的一段时期内,我还是不得不使用WebQQ。WebQQ有一个特点让我觉得*非常非常*烦人——在来消息后就那么一直一直一直一直地滚动标题栏,似乎有天大的事需要我立即处理否则就性命难保似的。非常非常讨厌。像Gmail或者twitter那样只是在标题栏上加个括号号个数字不行吗?。。。

我再也不要默默忍受下去了!于是,点击GreaseMonkey图标,打开Vim,开始写脚本。

脚本其实很简单,只是我今天才想到可以这样子而已。WebQQ当点击聊天对话框后标题就会变正常。于是,我用Javascript模拟点击。不好监测标题栏的改变,干脆每隔几秒去点一下算了。代码如下:

// ==UserScript==
// @name           quiet WebQQ
// @namespace      http://lilydjwg.is-programmer.com/
// @description    来消息时不要滚动标题栏
// @include        http://web.qq.com/main.shtml?*
// ==/UserScript==

window.clicker = function(){
  var evt = document.createEvent("MouseEvents");
  evt.initMouseEvent("click", true, false, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);

  var edits = document.getElementsByClassName('editArea');
  for(var i=0, len=edits.length; i<len; i++){
    edits[i].dispatchEvent(evt);
  }
};

//最多滚动三秒好了
setInterval(window.clicker, 3000);

这里clicker函数需要作为window的一个属性,否则会在页面加载完,脚本执行过后就消失了。


点击此处安装

6
30
2010
1

GM 脚本:转换QQ空间的Javascript链接为普通链接

为什么要访问难用的QQ空间我就不说了,相信各Linuxer能够理解。那为什么要把Javascript链接转换成普通链接呢?因为我喜欢用中键去点链接,让它在新标签页中打开,并且还是在后台打开。这样,在列表页面,我可以用鼠标中键选取自己感兴趣的链接,全部打开,选完好基本上第一篇也就加载好了,不需要等待加载。

无奈QQ空间特别喜欢使用Javascript,以至于我以为QQ空间里的文章都没有可以指向它的URL。后来看到QQ空间支持RSS了,才发现原来每篇文章都是有ID的,像这样可以访问:http://QQ号.qzone.qq.com/blog/文章ID。于是,此问题有解!

Firebug查看下就可以知道文章ID如何获取,然后利用强大的GreaseMonkey写个脚本转换之。思路很简单,但做起来还是遇到了点小问题——貌似在页面加载完毕之前脚本就已经执行过了。怎么办呢?我首先想到了延时,但觉得不太好控制。无意中在GreaseMonkey的右键菜单项中看到了“用户脚本命令”一项,遂Google之,获得此文。于是就用这个了,虽说每次要先去点下这个菜单项有点麻烦,但毕竟我QQ空间看得不是很多,而且这比之前要省事不少。好了,贴代码:

// ==UserScript==
// @name           QQ空间链接转换
// @namespace      http://lilydjwg.is-programmer.com/
// @description    将QQ空间链接从Javascript转换到普通链接
// @include        http://*.qzone.qq.com/*
// ==/UserScript==

var changeLinks = function(links){
  for(var i=0, len = links.length; i<len; i++){
    var link = links[i];
    if(link.href == 'javascript:;'){
      var id = link.getAttribute('onclick').match(/\d+/)[0];
      link.href = 'http://' + window.location.host + '/blog/' + id;
      console.log(link.href);
    }
  }
}

var do_it = function(){
  try{
    var links = document.getElementById('tblog').contentDocument.getElementsByClassName('blog_link');
    changeLinks(links);
    var links = document.getElementsByClassName('tx_fix');
    changeLinks(links);
  }catch(e){
    GM_log(e);
  }
}

GM_registerMenuCommand("转换js链接", do_it, '', '', 'j');

点击此处安装

5
23
2010
10

让火狐使用chrome的更好的Flash Player插件

Linux用户可能都知道,Windows平台的Flash Player是做得最好的,Linux和Mac下的非常耗CPU。而且我发现,我的火狐使用的libflashplayer.so 10.0r45版本的插件,每当上传文件时都会导致整个火狐没有响应,Flash上传控件亦无进度显示,直到上传完成才会恢复。所以,今天向DBank上传一个大文件时,我不得不强行关掉火狐,改用Chrome上传,好让火狐依旧能够浏览网页。令我惊讶的是,Chrome里的Flash上传控件表现得竟然比较正常,虽然CPU使用率还是挺高的,但至少不影响其它操作,而且进度指示也正常。

看来Chrome使用了更好的Flash Player插件。好东西可不能让Chrome独享,我遂进入Chrome的安装目录/opt/google/chrome,果真发现了一个名叫libgcflashplayer.so的so文件。我很高就,二话不说,在我的火狐配置目录下建立plugins目录,然后把这个文件链接过来。重启火狐,在插件列表里发现多了一个版本号为10.1r51的Flash Player插件。再上传测试,一切如Chrome中一样,哦耶!

Category: 火狐 | Tags: 火狐 linux flash
5
23
2010
1

Google开始支持https,遂更新火狐若干选项

 今天Google开始支持https了,所以我也应该做出改变了。

更改搜索引擎

我安装了Organize Search Engines,所以这是很简单的事,只要打开“搜索引擎选项”更改其属性就是了。如果没有安装类似插件,也可以手动更改。是一个XML文件,Linux下在/usr/lib/firefox-addons/searchplugins下找,Windows下在安装文件夹下的searchplugins下找。

更改地址栏搜索使用的搜索引擎

火狐的智能地址栏很强大,在地址栏直接输入关键字时,可能会跳转到相关网站上,也可能使用Google搜索。其实都是使用的谷歌(google.cn)。这个也应该给改了。

打开about:config页面,搜索keyword.URL,然后改掉就可以了。

Category: 火狐 | Tags: 火狐 google
5
6
2010
2

去掉 WebQQ 和 163 邮箱中讨厌的 UI 元素

这两天 WebQQ 的右上角又出现了红色的文字——“参与WebQQ知识问答,100Q币等你拿”。本以为过段时间它会消失的,结果到现在依然还在。

这红色的文字甚是碍眼,于是它享受了和163邮箱里的红字广告和“安全系数低”一样的待遇——被display:none了。下面是设置方法,前提当然是使用配置性强的火狐浏览器了。

首先确定 CSS 选择器。这个打开 Firebug 看吧。要写多点以免把其它网页的某些元素给选中了。也许可以指定当 URL 匹配时才匹配,但我还不会。我使用的选择器是:

#webqq_top > .top_right > .right_option > a[target=_blank]

选好后我使用 Firebug 的插件 Firefinder 确定了下正确性。毕竟我对 CSS 的高级点的选择器还不熟,没太多信心。要测试效果那可是要重启浏览器滴~

然后打开火狐的个性化配置文件<profile_dir>/chrome/userContent.css。这个 CSS 文件会应用于每个网页。(另外还有个userChrome.css文件是针对浏览器自身的。)在此文件中把那个元素隐藏起来就可以了 :-)

/*
 * WebQQ 讨厌的红色调查/问答链接
 */
#webqq_top > .top_right > .right_option > a[target=_blank] {
  display:none!important; /* !important 是必须的,提高该规则的优先级 */
}

在这个文件里面,还有我为屏蔽 163 邮箱里的红字而写的另外两条 CSS 规则:

/* 
 * 网易邮箱 3.5:不要显示“安全系数低”
 */
a#aWelcomeSecurity0 {
  display:none!important;
}
/*
 * 还有广告
 */
div.links > div.chl > a:last-child {
  display:none!important;
}

一点题外话:继发现网易邮箱不能发送纯文本邮件后,今又确认它每次都把 Google Group 的更新邮件给我扔到垃圾邮件里,太过份了。还是 Gmail 好啊!

Category: 火狐 | Tags: 火狐 css 反广告

| Theme: Aeros 2.0 by TheBuckmaker.com