【发布时间】:2018-11-25 05:22:13
【问题描述】:
这个简单的 Applescript 按预期工作:
tell application "Safari"
activate
set theURL to URL of front document
end tell
我现在尝试对其进行 Automator 操作/服务:
on run {input, parameters}
tell application "System Events"
if (name of the first process whose frontmost is "true") is "Safari" then
set theURL to URL of front document
end if
end tell
return theURL
end run
但这会返回错误消息:
“运行 AppleScript”操作遇到错误:“系统事件出错:无法获取文档 1 的 URL。”
嗯,所以我在 Automator 中添加了一个 tell application "Safari" to activate,以确保收到这些命令的是 Safari:
on run {input, parameters}
tell application "System Events"
if (name of the first process whose frontmost is "true") is "Safari" then
tell application "Safari"
activate
set theURL to URL of front document
end tell
end if
end tell
return theURL
end run
很奇怪,现在 Automator 动作卡在 0 % 上(如菜单栏中的 Automator 齿轮所示)。要完成脚本,我必须推送Esc。
事实上,如果我在 0 % 卡住时退出 Safari,当我尝试切换回 Safari 直到我按 Esc 时,它会保持后台运行。按下 Esc 后,Safari 自动进入前台,Automator 操作完成。
即:
- 在 Safari 中选择一些文本,然后从上下文菜单中选择此服务。
- 服务卡在 0 %。
- 切换到另一个应用程序 A。这按预期工作。服务仍停留在 0 %。
- 尝试使用 cmd-tab、dock 或其他方式切换回 Safari。没有任何反应,A 仍在前台,服务卡在 0 %。
- 按 Esc。现在服务结束,Safari 进入前台。
最后,我设置了 Automator 操作来替换
那么,为什么我不能访问第一个版本的 URL?为什么它会卡在第二个版本中?我应该如何写这个来完成我想要的?
编辑:澄清我想要实现的目标。我想从 Safari 最前面的窗口获取 URL,处理 URL,然后在其他地方使用它。我已删除 Automator 工作流程中的处理和“其他地方”部分以简化问题。
【问题讨论】:
-
阅读完 cmets,您的预期用户流程是否类似于:1. 用户使用 Safari 或 Chrome,然后他们选择例如
Safari>Services><NameOfService>从菜单栏中。 2. 您的脚本检索 URL 并将其分配给theURL变量。 3. 您的脚本还会确定 URL 来自哪个浏览器(Safari 或 Chrome),以便您可以执行不同的逻辑? 4. 但是,如果用户正在使用另一个应用程序(不是 Safari 或 Chrome)并选择Safari>Services><NameOfService>从菜单栏,那么你的脚本应该什么都不做? -
@RobC 是的,目的是在其他地方插入部分 URL。但是,Chrome 和 Safari 的 AS 词典略有不同。
标签: safari applescript automator