使用 Safari 浏览网页的时候,需要保存到 Notion 中去,但是 Notion 网页剪藏插件只有 Chrome 上有;
使用 Chrome 浏览网页的时候,想用阅读模式来浏览,但是 Chrome 上一直没有合适的阅读模式插件在体验上可以超越 Safari 的阅读模式。
以上的情况你可能也遇到过,或者也有类似的需求,就是一键将当前打开的 Safari/Chrome 页面在 Chrome/Safari 中打开。
下面就让我们用自动化来一键实现这样的效果。
- JXA 代码下载
- Keyboard Maestro 版下载
- Automator 版下载
动作使用
该脚本没有其他的依赖,依靠 Mac 即可运行,所以你需要做的就是下载上方文件,运行即可。
如何给安装的服务设置快捷键
Automator 版安装之后将会出现在 Safari 以及 Chrome 菜单栏的服务中,但是每次使用的时候还需要点击好几次,所以我们需要赋予它快捷键,方法如下:
- 打开“系统偏好设置”
- 选择“键盘—快捷键”
- 在“服务”中找到刚刚安装的“浏览器穿梭”,点击右侧设置快捷键
简单使用的你看到这边就足够了,下载使用即可,下面是一些制作过程中的困难与思考,供自动化爱好者参考。
原理解析
原理也非常简单,先判断最前方的窗口是 Safari 还是 Chrome,获取当前页面链接,关闭当前页面,在另一浏览器中打开。
虽然原理非常简单,但是在实现的时候还是碰到了一些问题:
1. 如果当前浏览器没有窗口则无法通过 ACTIVATE()
开启新窗口
所以我们需要使用 app.windows.length
先判断浏览器目前的窗口数量,如果窗口数量是 0 的话,那么就使用 Safari: app.Document().make(); Chrome: app.Window().make()
来创建新窗口。
2. 使用 PUSH()
在 SAFARI 中打开新页面并不会自动切换到该页面
push()
在 Chrome 中会自动切换到最新打开的标签页,但是 Safari 中却不会,所以我们需要使用 app.windows[0].currentTab = tabs
来切换到刚刚打开的标签页。
3. 当 SAFARI 只剩下一个标签页的时候,菜单栏的“关闭标签页”按钮将无法点击
所以我们需要使用 enabled()
来判断菜单栏中“关闭标签页”按钮是否可以点击,如果返回的是 false
,则点击“关闭窗口”。
4. JXA 如何模拟点击菜单栏按钮
可以参考该教程,
尾巴
本篇文章的标题由之前的 Keyboard Maestro(以下简称 KM)变成了 Automation,也是一个经过深思熟虑之后做出的转变。因为 KM 实在是一个过于小众的软件,尤其对于国内而言,更是如此,所以为了让自己的文章可以帮助到更多的人,接下来会从 KM 中跳脱出来,以 JXA(JavaScript for Automation)的方式呈现给各位。
JXA 相对于 KM,对于 Mac 自动化来说,显然是更具有普适性的。只需使用 Automator、Alfred、LaunchBar 等软件对于 JXA 的代码片段进行简单的“包装”即可为己所用。尤其是 Automator,作为 Mac 原生自带的自动化软件,无需支付任何额外的费用,并且经过简单的设置即可将 JXA 代码的功能与菜单栏的“服务”结合,在系统设置中设定快捷键调用。虽然配置步骤相对繁琐了一些,不过也基本上实现了与 KM 相同的效果。
虽然介绍的内容是以 JXA 为核心,但是因为 KM Trigger 强大的功能,KM 仍然是我自己采用的主要容器。接下来也会安排几篇文章给各位介绍如何使用 Alfred 和 Automator 作为 JXA 的容器。
为什么选择 JXA,而不是 APPLESCRIPT?
其一,对于 JavaScript(以下简称 JS)语言有一定了解,不过了解也真的非常有限,不过好在 JXA 对于编程语言的要求并非很高。AppleScript 对我来说相对陌生,虽说重新学习难度不大,但是毕竟还是需要花费时间。
其二,相对于 AppleScript 来说,JS 更加通用,现在各个平台上也纷纷推出了使用 JS 进行自动化的工具(如 iOS 的 JSBox),在 Mac 平台上自动化经验可以在一定程度上帮助我实现其他平台的自动化。
选择 JXA 所遇到的困难
其一,JXA 毕竟是 14 年随着 Yosemite 才发布的新功能,目前网络上大量针对 Mac 的自动化代码以及教程都是使用 AppleScript 编写的,所以在遇到难题的时候在网络上寻求帮助的难度会大一些。
其二,JXA 的文档非常不完善(不清楚 AppleScript 的情况如何),虽然 Script Editor.app 自带了一个文档库,但是方法、函数非常不全(也可能是我不会看),也并没有线上的文档库,遇到问题基本上只能参考别人已经写好的代码。
不过相信以 JS 语言的流程程度,未来肯定会有越来越多的 JXA 代码以及教程。
什么是 Keyboard Maestro?
Keyboard Maestro是 Mac 上一款非常强大的自动化软件,只要是操作上具有一定重复性的操作,理论上都可以通过在 KM 中多个动作(Action)的组合重现,可以大大提升工作效率,减少在重复性任务上花费时间。
微信公众号:@赛博格
博客:http://cybg.me