开发者

How do I scroll to the top of a window using applescript?

I want applescript to scroll a window all the way up.

I've tried开发者_运维技巧 the page up key, the home key, and I've tried looking for a way to scroll using the built in scrolling capabilities of the window, but I've so far been unable to even move the scrolled position at all.


Basically, use a tell app "System Events" statement to send keystrokes and key codes. In theory, you could use the following:

keystroke page up key
keystroke page down key
keystroke home key

But for me this doesn´t work. The good news is that you can use the key codes instead. I suggest using the excellent free Full Key Codes application to read them, though it is a bit tricky to let it read two keys pressed simultaneously.

The key codes for the fn+ arrow keys-combos are as following:

Page up: fn+ up key: key code 116

Page down: fn+ down key: key code 121

Home: fn+ left key: key code 115

End: fn+ right key: key code 119

So for example if you had a long page open in Safari, and you want to scroll to its end, use

tell application "System Events"
tell application "Safari" to activate
    — to see the animation, we wait a moment:
    delay 0.5  

    key code 119

end tell


With browsers you could also use JavaScript:

tell application "Safari" to tell document 1
    do JavaScript "window.scroll(0,0)"
end tell

tell application "Google Chrome" to tell active tab of window 1
    execute javascript "window.scroll(0,0)"
end tell


The alternative to sending keystrokes is to use GUI scripting.

Caveat: While GUI scripting is more robust than sending keystrokes for a given version of an application, changes in the application's layout in future versions can break your code.

Also:

  • GUI scripting requires that access for assistive devices be enabled; enabling requires admin privileges:

    • up to 10.8, this could be done programmatically, system-wide by executing tell application "System Events" to set UI elements enabled to true (required admin privileges)
    • Sadly, on 10.9+, this no longer works, and apps must be authorized manually, individually - the system will prompt you on first run (requires admin privileges)
    • however, in both scenarios tell application "System Events" to get UI elements enabled will report whether access is enabled or not.
  • Determining the right UI element targets can be non-trivial and tedious; using the Accessibility Inspector utility that comes with Xcode helps. The class names reported by this utility correspond to the UI element classes contained in the System Events dictionary; e.g., AXSplitGroup corresponds to splitter group.

The following scrolls Safari 6.0.3's front window to the top (access for assistive devices must be enabled):

tell application "System Events"

    # Use Accessibility Inspector to find the desired target.
    tell front window of process "Safari"
        tell scroll bar 1 of scroll area 1 of group 1 of group 1 of last group
            set value of attribute "AXValue" to 0  # Scroll to top.
        end tell
    end tell

end tell

Update: As a reminder that this type of scripting works well for a given version of an application, the code had to be changed for Safari 8.0.4:

tell application "System Events"

    # Use Accessibility Inspector to find the desired target.
    tell front window of process "Safari"
        tell scroll bar 1 of scroll area 1 of group 1 of group 1 of group 2
            set value of attribute "AXValue" to 0  # Scroll to top.
        end tell
    end tell

end tell
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜