Ответ 1
TL;DR
Использование set index of window <n> to 1
не полностью эффективно, поскольку оно действительно не активирует окно - оно делает его видимым.
Обходные пути (примеры предполагают, что вы хотите активировать окно 2):
-
Отвечать Яру предлагает прагматичное обходное решение, хотя не совсем понятно, почему он работает. Однако у него есть то преимущество, что не требуется, чтобы вызывающее приложение было разрешено для вспомогательного доступа, в отличие от следующих решений.
-
user495470 answer указывает на надежное и универсальное решение, которое также работает с приложениями, отличными от AppleScript:
tell application "System Events" to tell process "Google Chrome" perform action "AXRaise" of window 2 set frontmost to true end tell
-
В качестве альтернативы используйте обработчик AppleScript, определенный ниже, следующим образом:
-
tell application "Google Chrome" to my activateWin(it, window 2)
-
В то время как ответ adayzdone должен работать и почти есть, есть уловка - что может быть или не быть проблемой (наблюдается в Chrome 21.0.1180.89 на Mountain Lion) [обновление: по-прежнему действует с Chrome 47.0.2526.106 на OSX 10.11.2]:
Пока решение покажет нужное окно в качестве переднего окна, Chrome не будет рассматривать его как переднее окно, если другое окно было ранее активным. Вы можете указать кнопки неактивного закрытия/мин/зум-заголовка, по какому заголовку окна находится галочка, а также тому, что быстрые клавиши, такие как Cmd-L
, не будут применяться к нужному окну.
Если ваше следующее действие будет состоять в том, чтобы щелкнуть где-нибудь в окне в любом случае, это может быть не проблема, так как такой щелчок полностью активирует нужное окно.
В противном случае вы можете использовать достаточно надежный способ обхода GUI-скриптов (с благодарностью адаптированный из общего решения здесь):
Обновление. К сожалению, проблема не активирования окна, индекс которого вы устанавливаете на 1, кажется, влияет на ВСЕ приложения (опыт OS X 10.8.3). Здесь общая функция, которая правильно активирует данное окно в данном приложении AppleScriptable с использованием графического интерфейса пользователя.
# Activates the specified window (w) of the specified AppleScriptable
# application (a).
# Note that both parameters must be *objects*.
# Example: Activate the window that is currently the 2nd window in Chrome:
# tell application "Google Chrome"
# my activateWin(it, window 2)
# end tell
on activateWin(a, w)
tell application "System Events"
click menu item (name of w) of menu 1 of menu bar item -2 ¬
of menu bar 1 of process (name of a)
end tell
activate a
end activateWin
С другой стороны, то, что ОП пыталось использовать, например, activate window 1
, похоже, было нарушено во ВСЕХ приложениях в OS X 10.8.3, а также при запуске основного приложения, спецификации окна. игнорируется.
Здесь оригинальный, более дидактический код:
tell application "Google Chrome"
# Each window is represented by the title of its active tab
# in the "Window" menu.
# We use GUI scripting to select the matching "Window" menu item
# and thereby properly activate the window of interest.
# NOTE: Should there be another window with the exact same title,
# the wrong window could be activated.
set winOfInterest to window 2 # example
set winTitle to name of winOfInterest
tell application "System Events"
# Note that we must target the *process* here.
tell process "Google Chrome"
# The app menu bar.
tell menu bar 1
# To avoid localization issues,
# we target the "Window" menu by position - the next-to-last
# rather than by name.
click menu item winTitle of menu 1 of menu bar item -2
end tell
end tell
end tell
# Finally, activate the app.
activate
end tell