问题描述
示例:
当有人在浏览器中打开 myapp://hello 或有人执行 open "myapp://hello" 时,我想打开一个终端并运行 echo "hello myapp://hello"
我是苹果脚本的新手,所以我搜索了很多,但无法得出一个有效的代码片段。
我试过了:
on open location this_URL
display alert this_URL
tell application "Terminal"
reopen
do script "echo 'hello " & this_URL & "'"
activate
end tell
end open location
将 Info.plist 更新为:
.....
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>myapp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
....
此代码只是打开一个终端,但不运行 echo 命令。 代码的独立部分:
on open location this_URL
display alert this_URL
end open location
和
tell application "Terminal"
reopen
do script "echo 'hello " & this_URL & "'"
activate
end tell
完美运行。
但组合不起作用....
请告诉我一些解决方法。
提前致谢
解决方法
我认为这是授权问题。
我不知道为什么,但是当我们在 plist 中添加 CFBundleURLTypes 时,macOS 会阻止我们向终端发送事件。
所以这里有一个解决方法:
如下制作 2 个应用程序而不是一个应用程序
应用 1:网址处理程序
所以这将处理传入的 url 将其复制到剪贴板并启动第二个应用程序。 它的applescript如下:
on open location this_URL
set the clipboard to this_URL
tell application "/path/to/app2.app" to activate
end open location
将 CFBundleURLTypes 添加到其 plist
应用 2:终端处理程序
它将从剪贴板读取 url,然后在终端上运行它。 它的applescript如下:
tell application "Terminal"
set this_URL to ( the clipboard as text )
do script "echo 'hello " & this_URL & "'"
activate
end tell
set the clipboard to ""