volna
volna

Reputation: 2610

Swap between safari windows in a ninja way

The scenario I have is that the new windows opens, and the script executes inside it. I am looking for a way how to come back to the previous active window and did try these 2 ways:

1. Executing keyboard shortcut

tell application "System Events" to keystroke "§" using command down

Note: Unpleasant experience since the slight flashback as a result of window swap.

2. Giving lastWindow personal ID and later bringing it to the front

set lastWindow to id of window 1
...
set index of window id lastWindow to 1

Note: When the lastWindow is changed it becomes visible but inactive state, and requires an additional click on page to make it truly active

I did also try to change visible false of the newly created window, but it results in making it minimized and slowing the speed of background script execution.

Question. So is there a way to create new window and swap back to the last one while in a most "silent" way?

Upvotes: 2

Views: 168

Answers (1)

user3439894
user3439894

Reputation: 7555

In reference to:

Note: When the lastWindow is changed it becomes visible but inactive state, and requires an additional click on page to make it truly active

The following example AppleScript code will raise the previous front most window to the top having full focus and be active. No additional click necessary.

tell application "Safari"
    activate
    set thePreviousFrontWindowID to id of front window
    make new document with properties {URL:"https://www.google.com"}
    delay 4 -- # The delay command is here as a placeholder for whatever you're doing in the new window.
    set index of window id thePreviousFrontWindowID to 1
end tell

tell application "System Events" to perform action "AXRaise" of front window of application process "Safari"

It's the last line in this example AppleScript code that you need to get the window all the way to the top fully focused and active.

In reference to:

Question. So is there a way to create new window and swap back to the last one while in a most "silent" way?

Since windows don't make any sound when, for example, running the example AppleScript code above it couldn't be any more "silent" however, as far as minimizing visual distractions, that's so subjective that it almost should not have been asked. The fact is, there is always going to be some level of visual distraction as one moves though the windows of an app, manually or programmatically.

The only suggestion I have is, maybe set the bounds of the new window to that of the previous front window. Then when whatever is happening in the new and current front window is done and you bring the previous front window forward, you will see the entire window and none of the new window that's now behind it.

tell application "Safari"
    activate
    set thePreviousFrontWindowID to id of front window
    set thePreviousFrontWindowBounds to bounds of front window
    make new document with properties {URL:"https://www.google.com"}
    set bounds of front window to thePreviousFrontWindowBounds
    delay 4 -- # The delay command is here as a placeholder for whatever you're doing in the new window.
    set index of window id thePreviousFrontWindowID to 1
end tell

tell application "System Events" to perform action "AXRaise" of front window of application process "Safari"

These are just examples to show how to get farther along then you were.

Upvotes: 1

Related Questions