Seven Yu @ 05/08/2009 (5:21 pm)

如何在 GM(greasemonkey) 脚本中使用外部资源

这里所说的外部资源分为三种: 脚本, 图片 和 文本.

先说如何载入外部脚本:

相信很多写 GM 脚本的朋友包括我以前在引入外部脚本时都会使用下面的(或类似的)代码:

PLAIN TEXT >> JAVASCRIPT:
  1. var jQlab = document.createElement('script');
  2. jQlab.type = 'text/javascript';
  3. jQlab.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js';
  4. document.getElementsByTagName('head')[0].appendChild(jQlab);

这段脚本是可以工作的, 但有个问题, 就是每次执行脚本时都会重新去加载这个脚本, 很浪费时间和带宽.
正确的做法是利用 @require 元标签, 代码如下:

PLAIN TEXT >> JAVASCRIPT:
  1. // ==UserScript==
  2. // 此处省略其他一些 GM 元标签 ...
  3. // @require    http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js
  4. // ==/UserScript==

这样做的好处有二: 一是节省代码; 二是不会每次执行脚本都加载, 因为 GM 在安装脚本时会去加载这个文件, 把他下载到本地(脚本所在文件夹中), 之后每次运行脚本时都会到本地文件夹去加载文件, 这样就大大节省了带宽, 同时提高了脚本响应速度.

当然这样做也有一个缺点就是如果被载入文件更新了, 就只能从新安装该脚本, 本地文件不会跟着更新, 因为只在安装时才加载这个文件.

下面再来说说如何加载图片和文本:

这涉及到另外一个 GM 元标签 @resource, 代码如下:

PLAIN TEXT >> JAVASCRIPT:
  1. // ==UserScript==
  2. // 此处省略其他一些 GM 元标签 ...
  3. // @resource    resourceName http://www.example.com/resource.png
  4. // ==/UserScript==

使用时需要用到两个 GM 函数: GM_getResourceURL(resourceName)GM_getResourceText(resourceName), 前者将返回脚本中可用的 url 格式 (base64 编码), 后者返回文件内容.

这个元标签和 @require 一样, 也会在安装脚本的同时将资源下载到本地, 所以如果需要更新资源的话, 请重新安装脚本.

Seven Yu @ 05/04/2009 (5:05 pm)

新站 gm.phpz.org

一个新站, 偶的 GM 脚本集合.
地址: http://gm.phpz.org/

目前包括针对 Twitter, Plurk 和 Picasaweb 等站的 5 个脚本.

会陆续丰富更新, 敬请关注.

Seven Yu @ 04/03/2009 (10:20 am)

两个 twitter GM 脚本和一个 picasaweb GM 脚本升级了

以下三个脚本已更新, 请安装最新版本:

  1. Get Picasaweb Image URL
    • 由于 picasaweb 更新了一些页面元素的 class 和 id, 导致脚本失效, 现已更新.
    • 同时修复了之前被忽略的一些细节, 脚本可靠性得到增强.
  2. Twitter friends name helper
    • 由于 twitter 表单 id 的改变, 导致 Ctrl+Enter 快捷键失效, 现已更新.
  3. Twitter timeline updater
    • 新版本中增加了 retweet 功能.
    • 多重 RT 采用 RT @最终RT者: > @中间RT者: > @中间RT者: > @源作者: 内容 的形式

Seven Yu @ 02/28/2009 (8:42 am)

支持手动/自动更新 twitter timeline 的 GM 脚本

Tags: , ::

最近跟 twitter 干上了, 在 sfufoetPaveo 的怂恿下都快成 GM 狂人了 :x

昨天拖着我的麦粒肿又折腾到凌晨, 出炉了下面的 GM 脚本... [安装脚本]

Twitter timeline updater

  • 支持手动更新和自动更新
  • 受 twitter api 访问频率限制(每小时访问至多100次), 自动更新时间设为45秒
  • 更新内容以淡黄色为背景, 鼠标滑过恢复正常背景色
  • 更新内容时间显示客户端时区时间
  • v1.2.1 标题上显示未读计数
  • v1.2.1 记忆自动更新状态
  • v1.3.1 自动替换网址和 reply 链接
  • v1.3.2 增加 Make all read 按钮
  • v1.3.2 Refresh 和 Make all read 链接以图标表示
  • v1.3.2 修复了重复更新的 bug
  • v1.3.5 格式化日期

Seven Yu @ 02/26/2009 (9:16 pm)

最近写的两个 twitter GM 脚本

Emoji!!!

脚本安装地址: http://userscripts.org/scripts/show/42569

Display/Insert iPhone's Emoji icon on webpages. 显示/插入 iPhone 的 emoji 表情。

Twitter friends name helper

脚本安装地址: http://userscripts.org/scripts/show/43117

Tip:The helper is available when the input background color turns into light blue as the image.

输入 @ 或 用户名 可以自动完成

或者点击好友列表头像上的图标直接 reply 或 send direct message.

Seven Yu @ 08/19/2008 (5:30 pm)

基于 jQuery 的 Plurk 表情猴子脚本(Greasemonkey)

verion 1.0
Plurk Smile

verion 2.0
Plurk Smile

verion 3.0
Plurk Smile V3.0

最近研究 jQuery 小有收获,感觉这玩意儿真是方便,于是到处找实习机会。

昨天,土豆王Plurk 上发布了一个 用 AutoHotkey 写的自动插入表情的小程序,感觉想法非常不错,只是需要记住表情的代码,有点麻烦。我想最好能弹出窗口让用户点击选择表情,这样既直观又方便,而且不用记忆表情代码。

于是研究了一下ahk的gui部分,未果。今天偶然想到之前 Eddie 推荐的 Greasemonkey,据说这玩意儿很强大,而且脚本是用javascript,用这东西把表情整合到 Plurk 页面再合适不过了,于是诞生了下面的脚本(代码是 version 1.0 的, 新版本的源码可以看这里):

PLAIN TEXT >> JAVASCRIPT:
  1. // ==UserScript==
  2. // @name           Plurk Smile
  3. // @namespace      http://phpz.org/
  4. // @description    Easy to insert Smile
  5. // @include        http://www.plurk.com/user/*
  6. // ==/UserScript==
  7.  
  8. // jQuery 1.2.6 pack
  9. // 这里是 jQuery 脚本
  10.  
  11. // My Script
  12. var phpzOrgPlurkFaceCount = new Array();
  13.  
  14. phpzOrgPlurkFaceCount.push(new Array('http://ipx6.cn/plotion/onion/',
  15. new Array('ah.gif','ah2.gif','ah3.gif','angry.gif','angry2.gif','angry3.gif',
  16. 'angry4.gif','angry5.gif','baby.gif','bath.gif','buddha.gif','bye.gif',
  17. 'circle.gif','cold.gif','cold2.gif','cold3.gif','cold4.gif','comfortable.gif',
  18. 'cool.gif','cry.gif','cry2.gif','cry3.gif','cry4.gif','dizzy.gif','faint.gif',
  19. 'ghost.gif','glasses.gif','hand.gif','happiness.gif','hope.gif','idea.gif',
  20. 'ill.gif','knife.gif','lol.gif','look.gif','love.gif','lovely.gif','music.gif',
  21. 'nose.gif','oh2.gif','orz2.gif','pia.gif','question.gif','redcard.gif','runcry.gif',
  22. 'shrug.gif','shy.gif','shy2.gif','shy3.gif','sleep.gif','smile.gif','smoke.gif',
  23. 'soccer.gif','soccer2.gif','soccer3.gif','speed.gif','star.gif','sweat.gif',
  24. 'sweatlove.gif','think.gif','vomit.gif','w.gif','wall.gif','wind.gif',
  25. 'wind2.gif','wow.gif','xd.gif','yawn.gif','yellowcard.gif')));
  26.  
  27. var phpzOrgPlurkImageArea = $('
  28. ');
  29. var phpzOrgPlurkShowSmile = $('<a href="javascript:void 0;">Show Smile&gt;</a>');
  30.  
  31. $(phpzOrgPlurkFaceCount).each(function(item)
  32. {
  33. phpzOrgPlurkAppendImage(this);
  34. });
  35.  
  36. $(function()
  37. {
  38. var curInput = $('#input_big');
  39. var in_big = $('#input_big');
  40. $('#input_big').add('#input_small').bind('focus', function()
  41. {
  42. curInput = $(this);
  43. });
  44. phpzOrgPlurkShowSmile.insertAfter(in_big)
  45. .css('font-size', '12px')
  46. .toggle(function()
  47. {
  48. $(this).html('Hide Smile &lt;');
  49. phpzOrgPlurkImageArea.slideDown('slow');
  50. },
  51. function()
  52. {
  53. $(this).html('Show Smile&gt;');
  54. phpzOrgPlurkImageArea.slideUp('slow');
  55. });
  56. phpzOrgPlurkImageArea.insertAfter(in_big)
  57. .hide()
  58. .css('background-color', '#fff')
  59. .find('img')
  60. .css({'width':'27px', 'margin':'2px'})
  61. .bind('click', function()
  62. {
  63. curInput.val(curInput.val() + ' ' + this.src + ' ').focus();
  64. });
  65. });
  66.  
  67. function phpzOrgPlurkAppendImage(arr)
  68. {
  69. var baseUrl = arr[0];
  70. $(arr[1]).each(function()
  71. {
  72. var _url = baseUrl + this;
  73. phpzOrgPlurkImageArea.append('<a href="javascript:void 0;"><img src="'+_url+'" alt="'+this+'" /></a>');
  74. });
  75. }

脚本页面:version 1.0 version 2.0 version 4.6,点击 “install this script”,提示安装成功后刷新 Plurk 页面就能看到效果了。