前言
前一段时间在外面使用手机急于寻找一些资料,需要用书签功能,主要手机浏览器主力是 Safari
然而在电脑却使用的是 Chrome
,主要这俩者在跨平台上并不是好用,一直苦恼书签不同步的问题。
实现
后来实在是受不了还是觉得有必要搞个同步书签的办法,之前也考虑到使用扩展来实现,但使用大多数扩展应用发现都不支持对自带的书签栏进行读写操作,只能把收藏的书签传到第三方服务器然后在扩展页面寻找对应的书签,所以这个方案直接被我放弃了。
搜集大多数资料还是觉得使用 AppleScript
去模拟点击同步书签比较靠谱,如果实现的话需要做好下面几个步骤:
- 编写
AppleScript
脚本,模拟下列操作- 打开
Safari
浏览器 - 文件 - 书签 - 导入自 - Chrome
- 取消
历史记录
和密码
,Chrome 历史记录过大会导致 Safari 浏览器卡死 - 关闭 Safari 浏览器
- 打开
- 编写
shell
脚本,能够在终端应用上执行脚本 - 开机运行脚本
脚本
AppleScript
语法虽然看不懂,但根据 Demo
和已有的代码我也大概知道怎么写,所以上面操作大体如下:
set SecondsDelay1 to 5
set SecondsDelay2 to 1
set importFromMenuItem to "导入自"
set importFromGoogleChromeMenuItem to "Google Chrome…"
tell application "Safari"
quit
end tell
tell application "Google Chrome"
quit
end tell
delay SecondsDelay1
tell application "Safari" to activate
tell application "System Events"
tell process "Safari"
click menu bar item "文件" of menu bar 1
click menu item importFromMenuItem of menu "文件" of menu bar item "文件" of menu bar 1
delay SecondsDelay2
click menu item importFromGoogleChromeMenuItem of menu importFromMenuItem of menu item importFromMenuItem of menu "文件" of menu bar item "文件" of menu bar 1
click checkbox "密码" of sheet 1 of window 1
click checkbox "历史记录" of sheet 1 of window 1
click button "导入" of sheet 1 of window 1
repeat until static text "完成从Google Chrome导入" of sheet 1 of window "起始页" exists
-- 等待导入完成
end repeat
click button "好" of sheet 1 of window "起始页"
delay SecondsDelay2
tell application "System Events"
keystroke "q" using command down
end tell
end tell
end tell
脚本本质上就是根据软件的 UI
关键词来进行模拟点击,所以写起来也不算困难。
然后在终端执行:
osascript ~/Others/自动导入书签.scpt
就可以运行脚本了,走到这一步还需要在系统设置授权辅助功能权限。
新建 auto-bookmarks.sh
脚本:
#!/bin/sh
osascript ~/Others/自动导入书签.scpt
sleep 1 & killall Terminal
sleep 5
是让脚本系统进入延迟运行,保证脚本运行的提高率,然后将脚本授权权限:
sudo chmod 777 auto-bookmarks.sh
在 系统设置 - 通用 - 登陆项
将 auto-bookmarks.sh
脚本添加到 登录时打开
列表里。
到此为止,算是把书签同步这个大问题解决了。
更新
使用脚本启动会在终端留下历史纪录,所以使用 plist
来启动脚本,在 ~/Library/LaunchAgents/
目录下新建 com.iiong.sync.bookmarks.plist
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.iiong.sync.bookmarks</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/osascript</string>
<string>/Users/jaxson/Others/脚本/自动导入书签.scpt</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
</dict>
</plist>
这样可以开机启动脚本。