快速业务通道

增强 Firefox 中的 Find 命令

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-10

Firefox 中的 Find 命令可以在 Web 页面的主体中定位用户指定的文本.该命令是一个易于使用的工具,大多数用户通常都可以很好地使用该工具.但是,使用更强大的类似 Find 的工具有时可以更轻松地定位文本.本文将介绍如何构建这种工具,通过检测邻近文字的显示和消失更快地隔离 Web 页面中相关的文本.
Firefox 中自带的文本搜索功能提供了实用的可以突出显示邻近搜索词和短语的功能.附加的 Firefox 扩展可用于合并正则表达式搜索与其他文本高亮显示功能.本文将提供向 Firefox 中添加自定义文本搜索界面所需的工具和代码.使用 Greasemonkey 用户脚本和一些自定义算法,您可以将 grep -v 函数添加到文本搜索中 — 也就是说,在第二个搜索词不在附近时高亮显示第一个搜索词.

要求

硬件

用较旧(2002 年以前)的硬件在典型 Web 页面中进行文本搜索几乎可以瞬间完成.但是,本文提供的代码在设计时没有考虑高速执行,并且可能要求使用较快的硬件才能在大型 Web 页面中按照用户满意的速度执行.

软件

本文的代码是为了结合使用 Firefox V2.0 和 Greasemonkey V0.7 而开发的.使用比它们更高的版本需要测试并且可能需要修改才能确保功能性.作为 Greasemonkey 脚本,本文提供的代码应当可以在支持 Firefox 和 Greasemonkey 的任何一个操作系统中运行.我们在 Microsoft? Windows? 和 Linux? Ubuntu V7.10 版本中进行过测试.

Greasemonkey 和 Firefox 扩展

对 Web 页面执行用户修改是 Greasemonkey 履行的任务,并且本文提供的代码将使用 Greasemonkey 框架来搜索和高亮显示相关文本.有关 Greasemonkey Firefox 扩展,请参阅 参考资料.

此 Greasemonkey 脚本的设计目的演示

熟悉 UNIX grep 命令及其常用 -v 选项的人知道如何将不可缺少的 grep 用于从文件提取相关文本行.遵守 UNIX 简单性原则的文本文件通常按照逐行的格式存储文本,这样可以轻松地找到靠近在一起的文字.-v 选项将输出未找到指定文本的行.

与文本文件不同的是,Web 页面通常用标签和浏览器呈现到行中的其他标记分隔文本.各种不同的浏览器窗口大小使您很难根据期望的行位置来隔离邻近文本.表、链接和其他文本标记也使您很难隔离位于 “同一行” 的文本.

本文中的算法旨在解决这些难题,提供类似于 grep 的简单功能,并使用工作原理类似于 grep 的 -v 选项的函数.这将允许用户查找文本的某个词,然后只高亮显示不包含另一个不同词的条目.图 1 显示了这种情况的示例.

图 1. DOM 和 DOM hierarchy 搜索示例

DOM 和 DOM hierarchy 搜索示例

在图像的上半部分中,脚本高亮显示了搜索文本 “DOM”.在下半部分中,注意如何只高亮显示前三个 “DOM” 条目,在极为接近第三个 “DOM” 的位置找到了第二个搜索文本 “hierarchy”.

考虑图 2.


图 2. 2008 和 2008 PM 搜索示例

2008 和 2008 PM 搜索示例

该图的第一部分显示所有 2008 条目,而第二部分 -v 关键字 PM,因此只显示中午前的条目.继续阅读获得全部信息以及如何实现此功能的更多示例.

greppishFind.user.js Greasemonkey 用户脚本

介绍 Greasemonkey 编程环境的独特之处不在本文讨论范围之内.假定您熟悉 Greasemonkey,包括如何安装、修改和调试脚本.要获得关于 Greasemonkey 及如何开始编写自定义用户脚本的更多信息,请参阅 参考资料.

一般而言,greppishFind.user.js 用户脚本在载入页面时启动,在输入特定组合键后提供文本区域,并且根据用户输入的文本执行高亮搜索.清单 1 显示了 greppishFind.user.js 用户脚本的开头部分.


清单 1. greppishFind.user.js 程序头

// ==UserScript==
// @name greppishFind
// @namespace IBM developerWorks
// @description grep and grep -v function-ish for one or two word searches
// ==/UserScript==

var boxAdded = false; // user interface for search active
var dist = 10; // proximity distance between words

var highStart = ''<high>''; // begin and end highlight tags
var highEnd = ''</high>'';

var lastSearch = null; // previous highlight text

window.addEventListener(''load'', addHighlightStyle,''true'');
window.addEventListener(''keyup'', globalKeyPress,''true'');

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号