JXA:只需单击 window(焦点 window)

JXA: Get just-clicked on window (in focus window)

使用 Javascript 实现自动化 (JXA) 我想识别用户刚刚单击的 window。换句话说,我要识别刚刚来到最前面的window。我该怎么做?

到目前为止,我识别了前面的应用程序,并尝试获取焦点应用程序的window,如下所示:

var frontAppName = Application("System Events").processes.whose({frontmost: {'=': true }})[0].name();  
var frontApp = Application(frontAppName); 
var theCurrentWindow = frontApp.windows[0]

这成功识别了应用程序的焦点,但 frontApp.windows[0] 不太正确,因为它与第一个 window 最初打开的应用程序相关联,无论 window在前面。 (在 applescript 中,“window 1”可能会起作用,但我希望有一个 JXA 解决方案。)

因此,如果我在一个应用程序中打开了多个 windows,我需要一种方法来确定我正在单击哪个。我该怎么做?

这是 JXA 的已知错误。您可以使用从 JXA 代码执行 AppleScript 的能力来解决问题。以下脚本将 return front window of frontmost application:

(() => {
    'use strict';

    // evalAS :: String -> IO String
    const evalAS = s => {
        const
            a = Application.currentApplication(),
            sa = (a.includeStandardAdditions = true, a);
        return sa.doShellScript(
            ['osascript -l AppleScript <<OSA_END 2>/dev/null']
            .concat([s])
            .concat('OSA_END')
            .join('\n')
        );
    };

    var frontAppName = Application("System Events").processes.whose({frontmost: {'=': true }})[0].name();  
    var frontApp = Application(frontAppName);
    return evalAS('tell application \"' + frontAppName + '\" to front window');

})();