使用JXA从选定的文本/突出显示的文本中获取字符串

时间:2016-06-17 06:43:35

标签: automator selectedtext jxa

我在这里吃晚餐,无论是Javascript还是JXA,如果我提出一些愚蠢的问题,请原谅我。但我正试图找出一种方法,使用JXA - 自动化JavaScript从突出显示的文本中获取字符串,因为Yosemite可以在Automator中识别Javascript,我认为我可以使用这些工具: window.getSelection in:

function getSelectedText() {
  if (window.getSelection) {
      txt = window.getSelection();
  } else if (window.document.getSelection) {
      txt =window.document.getSelection();
  } else if (window.document.selection) {
      txt = window.document.selection.createRange().text;
  }
  return txt;  
}

这段代码不是我的,有人贴了这个。但是我发现我不能在Automator中使用windowdocument来更改Mac OS,所以有人可以告诉我如何将这个Javascript代码转换为JXA,Automator可以理解?

非常感谢!

3 个答案:

答案 0 :(得分:0)

不要这样做,它只适用于嵌入在Web浏览器中的JavaScript。 JXA是一个独立的JS解释器,完全不了解网页或DOM(坦率地说,对于Mac应用程序脚本也没有太多线索,顺便说一下)。

相反,使用Automator创建OS X Service,因为服务可以操作几乎所有OS X应用程序中的选定文本;不需要应用程序脚本。

答案 1 :(得分:0)

你需要混合JXA和Safari的javaScript ......

var Safari = Application("Safari") // get Safari

selection = Safari.doJavaScript("document.getSelection().toString()",{    
    in: Safari.windows[0].tabs[0] // assume frontmost window and tab
})

脚本在JXA中,但document.getSelection()。toString()是Safari的javaScript。

当然,您需要在Safari中启用Apple事件... http://osxdaily.com/2011/11/03/enable-the-develop-menu-in-safari/

如果您想要其他应用程序中的选定文本,则代码可能会有很大差异。

答案 2 :(得分:0)

通常,您可以使用系统事件应用程序复制并粘贴任何应用程序。

def count_stuff(id, filename):
    return (some_numerical_calc(filename), size_of_file(filename))

for id in ids_list:
    nums = 0
    sizes = 0
    for f in files_list:
        num, size = count_stuff(id, f)
        nums += num
        sizes += sizes
    result = { id: (nums, sizes) }

有关详细信息,请参阅:

相关问题