AppleScript如何在两个自制应用之间传递参数
AppleScript 跨应用传参最优实现方案
方案1:自定义处理程序调用(首推)
这是Apple官方推荐的跨脚本应用通信方式,无中间介质,调用逻辑清晰。
App2 改造步骤
- 将业务逻辑封装为可被外部调用的自定义处理程序,示例代码:
-- 外部可调用的参数接收处理程序 on handleURL(inputURL) -- 此处替换为原有业务逻辑,直接使用传入的inputURL变量即可 # does Something end handleURL -- 可选:保留App2单独启动时的运行逻辑,不需要可删除 on run -- 单独打开App2时执行的代码 end run
- 导出App2时,在存储选项中勾选「可被脚本控制」(英文系统为 Allow AppleScript manipulation),否则外部应用无法调用它的自定义处理程序。
App1 改造代码
直接在唤起App2的同时调用其自定义处理程序传参:
on open location this_URL tell application "App2" activate handleURL(this_URL) end tell end open location
方案2:启动参数传参(无需开启脚本控制权限)
如果不希望给App2开放脚本控制权限,可以通过启动参数的方式传递变量,适合轻量化场景。
App2 改造代码
修改run处理程序接收启动参数:
on run argv -- 判断是否有传入参数 if (count of argv) > 0 then set this_URL to item 1 of argv -- 此处替换为原有业务逻辑 # does Something end if end run
App1 改造代码
通过shell的open命令带参数启动App2:
on open location this_URL -- quoted form 会自动处理URL中的特殊字符,避免转义错误 do shell script "open -a App2 --args " & quoted form of this_URL end open location
原有剪贴板方案的弊端
通过剪贴板中转参数会覆盖用户当前的剪贴板内容,且存在并发场景下的内容篡改风险,仅适合临时测试使用,不推荐生产环境使用。
内容的提问来源于stack exchange,提问作者Shubham Kumar
相关产品推荐
相关产品推荐

