在OSX应用中获取当前突出显示的文本?

时间:2015-08-25 21:27:17

标签: macos swift

有没有办法从OSX应用程序中检测当前选中/突出显示的文本并将其存储在字符串中?

例如,如果我进入Safari并从随机网站突出显示一个段落,然后启动我的应用程序,有没有办法获取我在Safari中突出显示的文本?

我还没有听说过这个,但我不是一个例子,所以我不确定它是否可能。

谢谢!

2 个答案:

答案 0 :(得分:0)

通常,要从其他应用获取所选文本,您需要启用辅助功能。也就是说,它需要被授权来控制系统。 在代码中,您可以使用AX辅助功能API,也可以将AppleScript与#34;系统事件"

一起使用

使用Safari,您可以拥有自定义扩展,但这将同样复杂且投资回报率更低。

答案 1 :(得分:0)

这适用于使用Command C进行复制的任何应用程序,即几乎所有应用程序。以下示例适用于Safari。在运行之前,请确保用户在Safari中突出显示文本,并且随后不会更改选项卡或窗口。如果用户专注于另一个应用程序,则可以。延误至关重要。你可以用更少的时间逃脱,但这一切都取决于运行时用户系统的状态,因此延迟越长,过程越健壮。

tell application "System Events"
    tell application "Safari" to activate -- focus on Safari's current tab
    delay 0.25 --critical
    keystroke "c" using command down -- copy clipboard contents
    delay 0.25 --critical
end tell

set highlightedText to the clipboard as Unicode text
display dialog highlightedText -- just to see the results, otherwise delete

set the clipboard to "" -- return clipboard to blank state

如果您打算使用Safari进行此操作,那么以下是您最好的选择,通常不需要延迟。否则,与上述相同的附带条件。

tell application "Safari"
    set highlightedText to (do JavaScript "(''+getSelection())" in document 1) as string
end tell