[uc]findBarAsSearchEngine -> Find Engine - 20110212更新

(6,486 views)
December 25, 2010

从0.06版起更名为Find Engine(准备发布add-on版,为保持名称一致)

这个脚本把findbar的功能集成到searchbar中。
在searchbar中添加了一个新的search engine – Find Engine,通过这个引擎可以在当前页面搜索文本关键字,完成跟findbar一样的功能。

操作:

  • 回车 – 开始搜索/搜索下一个
  • shift+回车 – 反向搜索下一个
  • Ctrl+回车 – 高亮所有匹配

> Update History
0.09 - 2011-02-12

  • 修改findEngine_hackShortCut参数,只控制是否替换默认的ctrl+F快捷键(该参数不再控制开启/关闭F3/F4为查找选中关键字的功能,F3/F4功能直接开启)
  • 修复“ctrl+F4关闭tab”和“alt+F4关闭窗口”不能用的问题
  • 修复在忽略大小写情况下查找选中关键字的下一个时为因为大小写切换而失效一次的问题
  • 从引擎列表中删除FindEngine
  • 现在在searchbar的引擎列表里不再显示FindEngine。
    但是如果findEngine_hackShortCut=true,仍然可以通过ctrl+F来使用searchbar进行页面查找(或者使用代码FindEngine.showUI();)

  • 提供调用函数方便手势和快捷键扩展调用
    • 用searchbar来进行页面查找
    • FindEngine.showUI();
    • 正向查找选中关键字
    • FindEngine.findSelection(false);
    • 方向查找选中关键字
    • FindEngine.findSelection(true);

0.08 - 2011-01-25

  • 修复F3/F4查找时遇到输入框会停止的bug – 感谢Leo提交bug
  • 调整UI,只在真正查找出结果时才会显示,只选中Find Engine不会显示
  • 增加大量可配置项
    • findEngine_FINDSELECTION_HIGHLIGHT
    • 控制在查找selection时是否自动高亮

    • findEngine_FINDSELECTION_BAR_RIGHTTRIM
    • 控制在查找searchbar中的selection时是否截断尾部的空格

    • findEngine_FINDSELECTION_PAGE_RIGHTTRIM
    • 控制在查找页面中的selection时是否截断尾部的空格

    • UIConfig
    • 控制统计UI的样式

      1. hidden
      2. 是否不显示统计UI,允许值true/false

      3. anchor
      4. 统计UI可以固定显示在某个chrome元素的旁边,anchor用于指定该元素,值为字符串表示的javascript代码(需要返回一个DOM元素)。当该参数为null时,使用x和y参数进行绝对定位。

      5. position
      6. 与anchor参数配合使用,指定UI与anchor的位置关系。支持下列字符串值

      7. x和y
      8. 配合上面两个参数对UI位置进行微调,x调整水平方向,y调整垂直方向,允许值为整数,单位像素。

      9. seperator
      10. 统计分数线的符号,比如可以配成 “1 / 2”,“1 | 2”,“1 : 2”等等。
        PS:显示时会在该参数的配置值两侧再添加一个空格

      11. disappearTime
      12. 控制统计UI自动隐藏的时间,允许值正整数,单位毫秒。默认显示出来3s后自动隐藏。

    统计UI相关CSS:

    #findEngineContainer {
    -moz-appearance:none !important;
    max-width: 150px !important;
    
    /* 控制UI的border样式 */
    border: 1px solid silver !important;
    /*border-top: 0px !important;*/
    
    /* 控制圆角 */
    border-radius: 4px 4px 4px 4px !important;
    
    /* 背景色 */
    background-color: #E1E9F3 !important;
    }
    

    统计UI调整事例:

    1. 默认情况下,UI是显示在屏幕中间附近位置
    2. UI显示在页面内容区域左上角。
      hidden: false,
      anchor: 'document.getElementById("appcontent");',
      position: 'overlap',
      x: 0,
      y: 0,
      

      x和y可能需要酌情进行微调

    3. UI显示在当前Tab下方
    4. hidden:false,
      anchor: 'gBrowser.mCurrentTab',
      position: 'before_start',
      x: 1.5,
      y: 0,
      
    5. 像之前版本一样UI跟随searchbar
      hidden: false,
      anchor: 'FindEngine.impl.getLocation();',
      position: 'before_start',
      x: 0,
      y: 1,
      

    CSS可能也需要相应调整。
    自己可以根据需要酌情发挥。

0.07 - 2011-01-21

  • 通过ctrl+F使用Find Engine后,当前引擎会恢复到原来选中的引擎(这样ctrl+F查找和ctrl+K搜索互相不会影响)
  • 支持类似SearchWP的单个关键词查找 – 不需要切换到Find Engine
    1. 键盘 – F3/F4
      • 当searchbar中有文本被选中时,F3向下查找选中文本,F4向上查找,(加shift键相反)
      • 当searchbar中没有文本选中时,则查找页面中的选中文本
      • 当两者都有时,查找前者优先;当两者都没有时,F3/F4关闭高亮
      • 当searchbar中有多个关键字被空格隔开时,双击某个关键字会选中,但是其后的空格也会被包含。这时候如果F3/F4,则将截断后面的空格后并查找(注意:查找页面中选中文字并不会截断尾部空格)
    2. 鼠标 – 滚轮
      • 滚轮与F3/F4功能相同,参数findEngine_SCROLL_FIND_PRECISION控制滚动触发精度,默认滚3行触发

0.06 - 2011-01-16

  • 更名为Find Engine(准备发布add-on版)
  • 增加一个参数findEngine_hackShortCut,用来控制是否替换ctrl+F快捷键为呼出Find Engine,默认开启
  • 放大镜图标增加中键点击功能(直接点击反向查找,shift+点击正向查找),与右键点击相反
  • Find Engine失去焦点时统计图标立即隐藏(上版有2s延迟)
  • 使用contextSearch时,会通过统计图标显示匹配总数
  • 提高了与Omnibar和Popup Url And Search Bar的兼容性
  • 代码重构以及其他细节调整

0.05 - 2011-01-09

  • 优化了性能
  • 大量细节改进
    1. 查找时如果没有记录匹配,searchbar不再失去焦点
    2. 切换到Find Engine时,Find Engine独有的UI立即显示(不再是第一次搜索时显示)
    3. 切换到其他引擎时,UI隐藏
    4. searchbar失去焦点2s后,UI隐藏
    5. alt+C快速切换Match Case(大小写匹配)开关设置
    6. Match Case会同步FindBar里的设置
  • 调整了UI

0.04 - 2011-01-06

  • 兼容omnibar
  • 在searchbar中添加一个checkbox,用来控制搜索时是否大小写敏感


0.03 - 2010-12-30

  • 使Find Engine在非searchbar中也能使用,效果是高亮关键字,比如点击右键菜单中搜索引擎列表里的Find Engine(需要脚本或者扩展实现contextSearch) – (感谢jiahuiqu的意见)
  • 在searchbar中的放大镜按钮上使用右键可以直接操作Find Engine(即使当前选中的引擎不是Find Engine,左键单击是使用当前的引擎搜索) – (感谢chan0001的建议)

0.02 - 2010-12-28

  • 增加匹配统计功能 – 包括在searchbar显示匹配总数和当前匹配的序号,形如 – 2/6
  • 统计数量不包括输入框中的匹配,尽管高亮功能会把输入框中的匹配也高亮



0.01 初版 - 2010-12-25

> Attachments
findEngine_0.09.uc
findEngine_0.08.uc
findEngine_0.07.uc
findEngine_0.06.uc
findBarAsSearchEngine_0.05.uc
findBarAsSearchEngine_0.04.uc
findBarAsSearchEngine_0.03.uc
findBarAsSearchEngine_0.02.uc
findBarAsSearchEngine_0.01.uc

>> 下面这些脚本适合配合使用

  1. findbarMarker
  2. 在高亮所有匹配时会在右侧显示一个滚动条标记出匹配在页面中的位置

  3. shortcut4SearchEngineChange
  4. 在searchbar搜索框中,点击tab键可以直接切换到下一个搜索引擎(shift+tab切换到上一个)。

  5. contextSearcher
  6. 页面右键菜单中添加搜索引擎列表 – 作者Griever

  7. 站内搜索
  8. 添加一个站内搜索的引擎到searchbar(使用google站内搜索API)- 作者不详
    siteSearch.uc

  9. searchSelectionByCurrentEngine
  10. 用当前搜索引擎搜索选中的文本。
    这个是快捷键代码,可以用在快捷键或手势扩展中。

  11. Popup Url and Search bar
  12. 隐藏searchbar、ctrl+K呼出、可拖拽searchbar至任何位置


related post

(6,486 views)

34 Responses to [uc]findBarAsSearchEngine -> Find Engine

  1. chan0001 says:

    是否可以实现左键点击搜索放大镜用设定的搜索引擎搜索,右键点击搜索放大镜用find Engine页内查找?

  2. chan0001 says:

    很好用,非常感谢你!

  3. chan0001 says:

    我觉得大小写匹配很少用到,但是下面两个功能有利于脚本完善:
    1.中键点搜索放大镜搜索上一个;
    2.切换标签后搜索提示自动消失(能有记忆效果更佳)。

    • admin says:

      1. shift+点击放大镜图标即可搜索上一个,ctrl+点击放大镜图标高亮关键字
      2. 请试用新版,自动隐藏我采用的是另一种方式,欢迎反馈意见。

  4. chan0001 says:

    03、04版都可用,我还在使用03。UI是中国软件发展的悲剧。
    不知道以下功能是不是能通过脚本实现:
    1.checkbox在alt+C切换选中时显示,否则隐藏。
    2.通过现有的放大镜图标,鼠标可以查找上一个,这是方便用户体验,并不会妨碍使用键盘。
    3.标签切换后查找提示隐藏。

    • admin says:

      1. 目前checkbox是通过accesskey控制的快捷键,隐藏以后没法收到按键通知,就再也显示不出来了。以后会考虑把checkbox从搜索框中移到统计的UI中,这样的话想怎么做都方便
      2. 你说的有道理,0.06已支持。
      3. 提示我是通过focus与blur控制的,所以标签切换时searchbar应该会失去焦点,提示就会隐藏。只不过之前的版本隐藏会在2s后生效,0.06版我已改成立即隐藏。

    • admin says:

      checkbox如果用不到,可以用css完全隐藏
      #findMatchCase {
      display: none;
      }

  5. lianyi says:

    能否按下ESC时自动切回默认的搜索引擎呢?

  6. chan0001 says:

    06版很好了。我这里右键点放大镜图标会弹出工具栏菜单,另外UI在右键呼出时不会自动隐藏,甚至会出现在其它应用程序的窗口上,位置也会不时在最左上,不时在搜索栏的左上位置。

    我同时使用鼠标手势开关查找栏,然后把查找栏改成如下样式(like chrome):
    #browser-bottombox { position: fixed; }
    #FindToolbar { position: fixed;top: 69px;right: 0px;-moz-border-radius-bottomleft: 4px;border-top: none !important;border-bottom: none !important; }
    #FindToolbar checkbox .checkbox-label-box,label.findbar-find-fast,.findbar-find-next label,.findbar-find-previous label,.findbar-highlight label,.findbar-find-status,.find-status-icon,.findbar-closebutton { display: none !important; }
    #FindToolbar toolbarbutton { padding: 0 !important;margin: 0 !important; }
    #FindToolbar textbox { width:200px !important; }
    所以check-box不隐藏了,也不去注意这个;
    期待add-on,提前祝贺您,将会由您开发更优秀的扩展来代替searchwp!
    建议UI还是集成到搜索框内,另searchwp的单个词查找也可以借鉴,中文的不用单个词查找,能否实现英文的单个词查找并可以选择。

  7. whoami says:

    您好,您写的脚本都是精品啊!!

    太好用了,很感激您一直为大家写了这么多好的脚本.

    请问这个Find Engine 0.06版本中 Ctrl+回车 – 高亮所有匹配

    Ctrl+回车 我想修改成其他快捷键,请问怎么操作?

    • admin says:

      你如果用了快捷键扩展的话,可以用下面的代码:

      var findText = document.getElementById(“searchbar”).value;
      gFindBar._findField.value = findText;
      gFindBar.getElement(“highlight”).click();

      注意:findText变量存的是要高亮的关键字,上面我写的是用searchbar中的文字,你可以改成其他的
      比如:换成 – 高亮当前选中的文本
      var findText = document.commandDispatcher.focusedWindow.getSelection();

  8. lianyi says:

    昨天升级到0.07后出问题了,现在第打开一个选项窗口,或者对话框就会弹出几十个错误窗口:
    【JavaScript应用程序】
    Type Error Find Command is null
    将这个脚本删了就好了。

    • admin says:

      有两个原因:
      1. 你的加载脚本userChrome.js应该用的最通用的加载规则
      userChrome.import(“*”, “UChrm”);
      这样的话,你打开任何chrome窗口,包括选项、下载、书签等等都会把uc脚本都加载一遍,而大部分脚本都是针对主窗口写的,所以在这些窗口加载时会出错,你可以打开Error Console看看,里面可能很多错误。
      2. 第二个原因是我的过失,0.07上传附件时我开了debug,所以findEngine脚本如果出错不仅往Error Console写,还会弹出错误窗口提示。

      修复有两个办法:
      1. 重新下载关闭debug的脚本,我会重新上传一份
      2. 一劳永逸的办法,userChrome用下面的加载规则
      if (location == “chrome://browser/content/browser.xul”) {
      userChrome.import(“*”, “UChrm”);
      }
      这样uc脚本只会在主窗口加载一遍,其他的chrome窗口都不会加载。

      关于userChrome.js,我写过另一篇文章,你可以参考一下
      http://www.slimeden.com/2010/08/firefox/how-to-use-userchrome-script

  9. givemeipad says:

    请问 ctrl + k 这个快捷键 怎么修改成 ALT+F 呢?

  10. givemeipad says:

    找到 一个 firefox4 RC 能用的keyconfig . 问题解决!!

    您脚本真的很人性化,很完美.

    真的很谢谢您这么辛苦写了这么多好的脚本给大家用. 而且有问必答,这个太难得了!! 跪拜!

  11. givemeipad says:

    能否 禁用 快捷键 F4的功能. 和我在keyconfig定义的快捷键 冲突

    • admin says:

      直接改脚本,找到hackShortCut函数,把下面这段注释掉:
      window.addEventListener(“keypress”, function(e) {
      if(e.keyCode == 115 && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) {//VK_F4
      e.preventDefault();
      e.stopPropagation();
      FindEngine.findSelection(true);
      }
      }, true);

      var f4ShiftCommand = document.createElement(“key”);
      f4ShiftCommand.setAttribute(“keycode”, “VK_F4″);
      f4ShiftCommand.setAttribute(“modifiers”, “shift”);
      f4ShiftCommand.setAttribute(“phase”, “capturing”);
      f4ShiftCommand.setAttribute(“oncommand”, “FindEngine.findSelection(false);”);

      var keys = document.getElementById(“mainKeyset”);
      keys.appendChild(f4ShiftCommand);

  12. givemeipad says:

    感谢您 , 已成功解决.

  13. alan says:

    再请教下;
    “keycode”, “VK_F4″这种如果要把快捷键f4改成字母,比如n,该怎么改?

    • admin says:

      F4的代码 – FindEngine.findSelection(true);
      用keyconfig配成n就行。

      另外F4这个比较特殊,是用listener实现的,用keyconfig识别不出来,所以覆盖不掉,但是另设一个n可以。
      (只能另用脚本禁用)

      其他的(比如F3,shift+F4),用keyconfig应该就能读出来,直接禁用了,然后换成其他键即可。

    • admin says:

      或者直接改脚本代码中的keycode,把115改成78(n的keycode是78)

  14. alan says:

    解决了,keyconfig里新建了个。

  15. tyc600 says:

    有没有计划加入正则表达?

    • admin says:

      支持正则表达式需要用到XPCOM,必须封装成扩展,而且efforts较大,短期内不会支持。

  16. givemeipad says:

    Mozilla Labs: Prospector – Find Suggest

    这个功能 感觉配合 find-engine 使用挺好的

  17. 顾神思 says:

    使用中。老大能不能对那个站内搜索改进下,设定右键站内搜索所选关键词能用当前或者指定搜索引擎在新窗口打开,而且最好跟omnibar或者foobar兼容,我见过有个扩展(insite search)能实现这个功能,不过我认为这个功能用扩展来实现有点高射炮打蚊子,只有TMP这样恐龙级别的玩意儿才能用得上……

  18. 顾神思 says:

    另外能不能跟flybar一样,把findbar调整为屏幕中间出现?快捷键呼出。

  19. lianyi says:

    在FX5.0下不起作用了是怎么回事?

  20. 浮生四相 says:

    你好,foobar扩展比omnibar强大很多,但是现脚本兼容性不好,能否在下个更新中兼容foobar?

①若要贴代码,请将 "<" 改成 "&lt;",">" 改成 "&gt;".
②若要从他人留言中复制代码,注意检查引号可能是中文的,请手动修改成英文符号,避免不能工作