article_image

2023-08-11更新:Google、豆瓣等动作最初以 Python 2 编写,当前 macOS 操作系统已经不再预装 Python 2,导致相关动作无法使用。当前仓库中的相关动作已经更新为 Python 3 版,请确保您的电脑已安装 Python 3。

各种搜索引擎用多了,有一日在 MacBook 上查词时突发奇想:能不能像 macOS 原生词典那样,通过弹出式(Popup)窗口来进行简单的网页搜索?

macOS 弹出式查词体验清爽,不用离开当前页面,查完就走,免得开一个扑你满脸、可能还插满广告的新网页。回忆一下 Siri compact search,便可知小浮窗在多数场景下已是绰绰有余,比如查一个俚语的解释,可能看看第一个结果的简介就行了,都不用点进去;或者想查一下最新一部《潜伏》的电影评分,瞥一眼豆瓣简介也够了;有些看似高深的专业词汇,看看在线字典的释义也能懂个大概,不需要专门奔往查询页面……碰巧 Automator 提供了 Website Popup 组件,可以让搜索页面呈现为类似弹窗查词的样式;同时,加上一点点自动化技巧,还能打造一套涵盖常用网站、随时可以呼出的弹窗搜索动作组。

Alt text
用 Automator 实现的弹窗搜索

一个彩蛋:很多网站因为弹出式窗口空间狭小,“不得不”放弃在页面左右插入广告,或者针对小窗口会提供广告较少的移动端布局。虽非本意,但弹出式搜索也是“去广告”的一种方式。

>> 下载链接 <<

动作安装与使用

本文提供的示例动作有豆瓣电影搜索、豆瓣图书搜索、维基百科和 Giphy 动图搜索,双击安装后它们会出现在右键菜单中。示例动作只有 4 个,后期积攒多了的话,这些动作会被折叠进一个二级菜单(macOS 12 之后,统一会被折叠进去 “Quick Actions”中)。

使用方式都一样,在任意应用中选中一段关键词,然后点击右键,选中对应的动作,运行即可。比如像下图,浏览网页时看到一个不太熟的专有名词,就可以试着通过右键菜单激活弹窗搜索,大致了解生词的同时尽量不离开当前页面,免得打断阅读进度。

Alt text
浏览网页时随时通过弹窗查生词

只要不主动关闭,弹窗可以一直保留在屏幕上——而且在全屏应用中也可以一直悬浮,当作一个搁在手边的参考资料窗口。查完后,点击弹窗上的“OK”按钮即可关闭窗口。

弹窗虽小,其中仍然是一个正常、完整的网页,所含的图文内容也可以拖曳到其他应用中。如果你喜欢和朋友“斗图”,那么示例动作中的 Giphy 搜索就能派上用场:随便想一个符合聊天气氛的关键词,弹窗搜索后,直接从 Giphy 网页里把应景的动图拉到聊天窗口发送过去。

Alt text
聊天时随手搜表情包

除了拖曳内容,你要是愿意的话,还可以在弹窗中继续点开链接、查看子网页,和在 iPad 上使用 Slide Over 分屏操作的效果差不多。总之丰俭由人,瞥一眼就关掉也可以,当作迷你浏览器用也完全没问题1

Automator 弹窗动作默认通过右键菜单运行,但是网站多了之后,响应的搜索动作都会被压进二级菜单,用起来宛如翻箱倒柜。如果你有 LaunchBar2 或 Keyboard Maestro——LaunchBar 用户可以用 Instant Send 功能启动弹窗搜索。选中关键词后,双击 ⌘Command 键将关键词发送到 LaunchBar(默认,各人或有不同),再直接键入 websitePopup-xxx 的前几个字母,回车即可进行弹窗搜索,不再需要去右键菜单翻找。

Alt text
用 LaunchBar 汇集搜索动作,降低右键菜单压力

注意,为了让 LaunchBar 顺利找到搜索动作,至少动作名称开头得是英文字母。另外,不建议绑定快捷键(至少不建议完全借助快捷键启动弹窗搜索),使用中很容易积累上十几个搜索引擎,依赖快捷键的话,往往背都背不过来,并不“快捷”。

Keyboard Maestro 用户则可以使用 Palette 特性汇集各路搜索引擎,只需将各个搜索动作的快捷键设成一样,就会弹出一个集中了所有弹窗搜索功能的“工具栏”,在给右键菜单“减负”方面与 LaunchBar 各有千秋。关于 Palette 特性,可以参考《Keyboard Maestro Palette:macOS 上的全能工具箱》

自定义搜索引擎

Website Popup 模块呈现的是完整网页,除了一些需要登录才能搜索的页面,基本都可以直接通过弹窗正常打开。示例动作只有 4 种,但一般来说,只要一个网页可允许在其 URL 中插入关键词进行搜索,就能做成弹窗搜索的形式。从通用搜索引擎 Google、Bing,到专用搜索引擎维基、Giphy、Emojipedia,以及豆瓣等网站的站内搜索,都在弹窗搜索的可行范围内。

Alt text
自定义搜索引擎

下面我们解剖一个豆瓣电影搜索的动作,大致了解一下其内部原理;再之后,就可以试着自定义搜索引擎。

为了在小弹窗中获得较好的显示效果,可以尝试采用豆瓣移动版的 URL。找到其移动页面,随便搜一个关键词试试,可以发现其搜索 URL 是这样的:

https://m.douban.com/search/?query=无用之人&amp;type=movie
Alt text
豆瓣电影搜索的页面

很好理解,无用之人 是刚刚输入的关键词,而剩余部分就是豆瓣电影搜索的模板 URL。制作自动化动作时,只要需保留模板、替换 无用之人 成你的关键词就好了。

接着,打开豆瓣弹窗搜索的 Automator 动作,可以看到它由三部分组成:

  1. 动作的输入部分,允许此动作在任何应用(any application)中接收文本(text)作为关键词,这部分不用修改;
  2. Shell 脚本部分,负责将用户选中的关键词和搜索 URL 模板拼接起来,这里是我们主要需要修改的地方;
  3. Website Popup 部分,负责将 Shell 拼装好的 URL 以弹窗形式打开,这部分还可以设置弹窗尺寸、是否使用移动版,以达到更好的显示效果。
Alt text
弹窗搜索的步骤解析

Shell 脚本部分为了兼顾中文关键词,稍微做了一些 URL 编码工作,这样一来多数网页都可以识别我们选中的中文关键词——比如豆瓣就要求编码,不然搜不出东西。编码部分不用修改,不是特别感兴趣的读者跳过即可。

先来看最关键的 URL 填写。示例动作豆瓣电影搜索中,Shell 脚本最后一行承担了拼接 URL 的任务,其中的 URL 似曾相识:

https://m.douban.com/search/?query=$keyWord&amp;type=movie

没错,上面的 URL 就是经由豆瓣的搜索模板改造而成的,其中 $keyWord 变量就是编码后的关键词,这个变量由前面几行 Shell 脚本负责生成,你在自定义 URL 时直接使用即可。以 Urbandictionary 为例,你要做的只是用 $keyWord 换掉其搜索 URL 中的关键词,就得到下面的 URL:

https://www.urbandictionary.com/define.php?term=$keyWord
Alt text
弹窗搜索 Urbandictionary

自定义搜索引擎就是那么简单。顺便提一下,别忘了上面这个 Urbandictionary 弹窗就是一个正常的网页,所以点击的发声按钮也是可以点击的,如果你不太拿得准一个俚语怎么读3,那就可以试试弹窗搜索。

注意点:手机版网页容易失效

由于网络环境不同,在电脑上访问手机端页面可能会失败。我在使用 1.1.1.1 DNS 时就打不开豆瓣手机版(m.douban.com)。如果你也遇到不能访问或者显示空白的情况,可以尝试恢复系统默认网络配置。

最后一步是通过 Website Popup 显示弹窗页面。到这一步,核心的搜索 URL 已经组装完毕,剩下的只是显示效果的问题。Website Popup 可以模拟手机、iPad 或电脑的浏览器页面,不过既然是弹窗搜索,总还是往手机界面靠拢为妙,不然就没了“小浮窗”的感觉。Website Popup 的细节设置及原因如下:

  1. 网页尺寸(Site Size),默认的 iPhone 尺寸一般就够了,也可以在右侧输入数值进行微调;
  2. 用户代理(User agent),推荐选“iPhone”,这样搜索引擎服务器会把你识别成手机用户,提供相对干净的移动端页面(桌面页面两侧可是天然的广告位);
  3. 弹窗位置(Position),设置成在鼠标位置上,因为我们一般会用鼠标4选取关键词,让弹窗出现在鼠标周围,可以最大程度模拟系统词典“就地弹出查词窗口”的效果。
Alt text
步骤

  1. 每个弹窗都是独立数据、用后即焚,所以需要多用户登录的读者可以自己开发一些新用法。
  2. 比较遗憾,另一款启动器 Alfred 不能和 Automator 动作联动。
  3. 系统词典对俚语一般不太有效。
  4. 触控板也是一个道理,这里不做区分。

author_avatar

Lawyer, macOS/iOS Automation Amateur