Applescript - Google Chrome activate a certain window Applescript - Google Chrome activate a certain window google-chrome google-chrome

Applescript - Google Chrome activate a certain window


tl;dr

Using set index of window <n> to 1 isn't fully effective in that it doesn't truly activate the window - it does make it visible, though.

Workarounds (examples assume you want to activate window 2):

  • Yar's answer offers a pragmatic workaround, though it's not entirely clear why it works. It does, however, have the advantage of not requiring the calling application to be authorized for assistive access, unlike the following solutions.

  • user495470's answer hints at a robust and generic solution that also works with non-AppleScriptable applications:

    tell application "System Events" to tell process "Google Chrome"    perform action "AXRaise" of window 2    set frontmost to trueend tell
  • Alternatively, use the AppleScript handler defined below as follows:

    • tell application "Google Chrome" to my activateWin(it, window 2)

While adayzdone's answer should work and almost does, there is a catch - which may or may not be a problem (observed on Chrome 21.0.1180.89 on Mountain Lion) [update: still applies as of Chrome 47.0.2526.106 on OSX 10.11.2]:

While the solution will show the desired window as the front window, Chrome will NOT treat it as the front window if a different window was previously active. You can tell by the inactive close/min/zoom title-bar buttons, by what window title the checkmark is next to, and by the fact that keyboard shortcuts such as Cmd-L will not apply to the desired window.

If your next action will be to click somewhere on the window anyway, this may not be a problem, as such a click will fully activate the desired window.

Otherwise, you can employ a reasonably robust GUI-scripting workaround (gratefully adapted from a generic solution here):

Update: Sadly, the problem of not actually activating the window whose index you set to 1 seems to affect ALL apps (experienced on OS X 10.8.3).Here's a generic function that properly activates a given window in a given AppleScriptable app using GUI scripting.

# 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 tellon 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 aend activateWin

On a side note, what the OP tried - e.g., activate window 1 - seems to be broken in ALL apps on OS X 10.8.3 as well - while the underlying application is activated, the window spec. is ignored.

Here's the original, more didactic code:

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's 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.    activateend tell


Try:

tell application "Google Chrome"    activate    set index of window 1 to 1    delay 3    set index of window 2 to 1end tell


As mklement mentioned, changing the index raises the window, but for example keyboard shortcuts are still registered by the previously frontmost window.

tell application "Google Chrome"    set index of window 2 to 1end tell

Another option is to tell System Events to AXRaise window 1:

tell application "Google Chrome"    set index of window 2 to 1end telltell application "System Events" to tell process "Google Chrome"    perform action "AXRaise" of window 1end tell