详细介绍

在 developerWorks 论坛的消息链接旁添加 [+] 链接,让您直接在页面内查看消息,无需打开多个页面。 这原本是一个 Greasemonkey 脚本,专为 Notes.net/LDD/Lotus developerWorks 网站上的论坛设计。(http://www.lotus.com/ldd) 此后它被改写成了 Chrome 扩展程序。 如果您不知道 Greasemonkey 是什么,可以从这里开始了解: Firefox 用户(原版): http://greasemonkey.mozdev.org/ IE 用户(仿制版): http://www.daishar.com/blog/archives/2005/03/greasemonkey_fo.html 我只在 Firefox 中测试过此脚本,因此不知道它在 IE 中的运行效果如何。 =========================== LDD 论坛的问题在于,您无法看到与某条消息关联的回复正文。页面底部会列出回复链接,但您一次只能打开一条消息——如果一条消息有两条以上的回复,这会非常麻烦。 这个脚本借助 Greasemonkey 的魔力,在页面底部的每个回复链接旁添加一个小小的 [+]。点击 [+] 后,链接下方会打开一个区域,填入该条回复的消息正文。再次点击,回复正文就会消失。 从脚本的 1.3 版本开始,任何包含 ?OpenDocument 链接的 LDD 页面都会添加 [+],而不仅限于消息页面。因此,查看消息、论坛主视图甚至搜索结果列表时,脚本都能工作。 如果这些说明让您摸不着头脑,请访问:http://www-10.lotus.com/ldd/nd6forum.nsf 打开一条有多条回复的消息,然后分别在启用和禁用此脚本的情况下尝试阅读回复。 =========================== 我为脚本添加了几项效率优化: 1. 只有在您实际点击 [+] 时才会获取回复消息。这意味着查看有大量回复的消息时,页面仍能快速加载(也就是说,浏览器不会在打开页面时尝试获取所有回复)。只有点击 [+] 才会获取回复文本。 2. 如果您点击 [+] 查看回复,然后再次点击将其隐藏,脚本会记住该消息。因此,在刷新页面之前再次点击展开回复时,无需再次往返服务器获取消息——内容会立即显示。 3. 回复通过异步 XML HTTP 请求获取:请求取得回复文档,解析消息文本并将其插入一个区域(如今这个过程通常称为“Ajax”)。 =========================== 问题: 1. 我不得不在代码中硬编码一些内容,因为 LDD 论坛并没有以易于解析的方式组织消息(例如使用 div)。如果 LDD 团队决定重命名某些图片文件,脚本的部分或全部功能明天就可能失效。 2. 使用正则表达式也许能以更优雅的方式完成部分或全部工作。我不知道具体怎么做,也不太在意。目前的方法似乎有效,而且易于排查问题。 3. 页面上的少数链接可能也会被添加 [+],但尝试展开时会显示“Error finding beginning of body”消息(例如常见问题链接)。这是因为这些链接实际指向其他页面,而非能够按消息方式解析的内容。我考虑过添加代码来明确忽略这类链接,但所有这些排除规则只会让代码更混乱,而且我可能还得不断添加新规则。因此,与其尝试处理所有例外,我假定用户足够聪明,不会为这类情况烦恼。(更新:在 1.4 版本中,我添加了 ignoreList 数组,至少可以处理其中部分情况。) =========================== 历史记录: 版本 1.0——2005 年 4 月 16 日 首次发布。 版本 1.1——2005 年 4 月 16 日 修复了一个错误:登录时,用于确定正文块起始位置的标签不存在,导致登录用户无法获取消息文本。 版本 1.2——2005 年 4 月 17 日 修改脚本,在显示用的 div 隐藏时将其块样式设为“display: none;”,以消除每个回复链接之间出现的多余空白和换行。 版本 1.3——2005 年 4 月 19 日 修改脚本,使其处理所有 ?OpenDocument 链接,而不仅是消息底部的回复链接。这样一来,它不仅适用于消息页面,也适用于视图和搜索结果。不幸的是,这也会在一些无法正常展开的链接旁添加 [+](例如页面右侧的论坛常见问题链接)。我考虑过手动过滤这些链接,但与在代码中硬编码多个例外相比,保留少数无法正常工作的链接可能更好(代码中已经有太多硬编码内容了)。 另外做了一项小修改,以适应 ND7 论坛中不同的分隔图片,并使 [+] 在“展开”时变成 [-]。 版本 1.4——2005 年 5 月 10 日 添加 ignoreList 数组及相关处理,使脚本不再处理已知无法使用的链接。感谢 Christopher Byrne(http://controlscaddy.com)提供建议和应忽略内容的示例。 版本 1.5——2005 年 8 月 14 日 添加 endOfBody 数组及相关处理,以适应论坛消息正文部分可能存在的多种结束标记。论坛在 7 月底至 8 月初进行了小幅改版,开始在正文末尾使用不同的图片。借助新数组,今后添加正文结束条件会更容易。 版本 1.6——2005 年 12 月 3 日 Firefox 升级至 1.5 后,LDDMonkey 停止工作。Kurt Higley(http://www.higs.net)在一天内修复了它!他的修改包括: * 将 expander.onclick = ... 改为 expander.addEventListener('click', ...) * 将对 XMLHttpRequest 的调用改为 GM_xmlhttpRequest * 重构 getResponseText() 函数,使其拆分得更合理 我对 URL 处理做了一些修改,除此之外按原样纳入了这些更改。谢谢 Kurt! 我还在 @include 列表中添加了“https://*.lotus.com/ldd*”,以便在登录论坛时使用;并让脚本在之前的请求没有返回任何内容时尝试重新加载回复消息(这种情况似乎偶尔会发生)。 已在 Firefox 1.0.7/Greasemonkey 0.5.1 和 Firefox 1.5/Greasemonkey 0.6.4 中测试。 版本 1.7——2006 年 7 月 18 日,Peter LaComb 1:在 getXMLText 末尾、将正文插入 DIV 之前,我添加了这一行: bodyText = bodyText.replace(/]*>/g,""); 这会移除出现的所有烦人空白框。 2:更新后,在视图中使用时,脚本会获取回复列表,并允许您展开回复。 版本 1.8——2010 年 9 月 16 日,Lars Berntrop-Bos 添加 1.7 版本历史并格式化代码。提交给 Julian,以便在 OpenNTF 上发布。 =========================== 这是 Lars Berntrop-Bos(http://www.nsftools.com)编写的 lddresponse.user.js 脚本 1.8 版本。 2014 年 6 月 3 日 您可以随意使用此脚本,只要不追究我的任何责任,也不要声称脚本是您自己编写的即可。 最新版本应始终可从 OpenNTF 网站获取: http://www.OpenNTF.org/projects/pmt.nsf/ProjectLookup/LDDMonkey