Applescript- Hice un código de desplazamiento automático y necesito saber cómo detenerlo

0

Editar: este es el código más reciente que tengo ahora ... ¿Cómo puedo hacer que se detenga (cambie el valor de x) cuando ejecuto un script diferente?

    set x to 0

tell application "Google Chrome"
    set urlName to URL of active tab of front window
end tell

if urlName is "https://www.facebook.com" then

    tell application "System Events"
        tell application process "Google Chrome"
            set frontmost to true
            repeat while x = 0
                key code 38
                delay 1
            end repeat
        end tell
    end tell

else

    tell application "System Events"
        tell application process "Google Chrome"
            set frontmost to true
            repeat while x = 0
                key code 49
                delay 1
            end repeat
        end tell
    end tell

end if
    
pregunta Phoenix Ebner 28.05.2015 - 23:51

3 respuestas

1

Podemos usar defaults para almacenar y leer valores (escriba man defaults en una ventana Terminal.app para leer más sobre esto).

Ejecutar Script 1

Script 1

global x

property defaultIdentifier : "com.chrome.scroll"

-- Since we start fresh lets reset x
resetX()

tell application "Google Chrome"
    activate
    set urlName to URL of active tab of front window
end tell

if urlName is "https://www.facebook.com" then

    tell application "System Events"
        tell application process "Google Chrome"
            repeat while x = 0
                set frontmost to true
                key code 38
                delay 1
                my getX()
            end repeat
        end tell
    end tell

else

    tell application "System Events"
        tell application process "Google Chrome"
            repeat while x = 0
                set frontmost to true
                key code 49
                delay 1
                my getX()
            end repeat
        end tell
    end tell

end if

on getX()
    # Reading a value that does not exists will generate an error.
    # Since this script creates (at launch) the value with "resetX()", this can only happen when someone
    # deletes the defaults value while the script is running. (say, with "defaults delete 'com.chrome.scroll'").
    try
        set y to do shell script "defaults read" & space & quoted form of defaultIdentifier & space & "x"

        # Because "x" is an integer but "do shell script" returns text, we want to convert "y" into an integer.
        # This will throw an error if the value isn't an integer.
        set y to y as integer # if this fails, "X" is left untouched since it goes straight into the "on error" part.
        set x to y

    on error
        # To react to it, do something here. 
        # beep
    end try

end getX


# When writing into the defaults, we can give a hint that "x" is an integer (using "-int").
# It would also work without it.
on resetX()
    set x to 0
    do shell script "defaults write" & space & quoted form of defaultIdentifier & space & "x" & space & "-int 0"
end resetX

... y deténgalo con Script 2 :

Script 2

property defaultIdentifier : "com.chrome.scroll"
do shell script "defaults write" & space & quoted form of defaultIdentifier & space & "x" & space & "-int 1"


También puedes ejecutarlo directamente en Terminal.app o usarlo en un shell script , como esto:

defaults write com.chrome.scroll x 1    # or:
defaults write com.chrome.scroll x -int 1

Notas

Pongo el set frontmost to true en el bucle repeat ya que el usuario podría activar otra aplicación mientras se ejecuta el script, lo que podría desordenar todo.

Realmente no necesitamos usar un property para com.chrome.scroll , pero como el código necesita esa información en dos lugares y es posible que desee cambiarla, lo hice de esa manera.

Si desea cambiarlo, use algo único, sin espacios ni caracteres especiales. iTunes , por ejemplo, usa com.apple.iTunes y Finder usa com.apple.Finder . Por lo general, un application está utilizando bundle identifier como domain para el defaults .

    
respondido por el user128544 29.05.2015 - 01:58
1

He rehecho el script, otra vez. Ese código anterior era ridículo tbh. Me adelanté un poco ... Intentémoslo de nuevo ... Guárdelo como una aplicación "Manténgase abierta" otra vez, con el nombre que sea. Tendrá que dejarlo cuando desee detener el desplazamiento y volver a iniciarlo cuando desee continuar. Aconsejo ponerlo en tu Dock para facilitar el acceso:

global script_PID
on run
    tell application "Google Chrome" to activate
    delay 1
    tell me to activate
end run

on idle
    tell application "Google Chrome"
        tell active tab of front window
            set urlName to URL
            if (execute javascript "if (window.pageYOffset + window.innerHeight >= document.body.clientHeight){true;}else{false;}") is false then
                execute javascript "window.scrollBy(0,window.innerHeight - 40);"
            else
                tell me to quit
            end if
        end tell
    end tell
    return 1
end idle

Dígame si tiene algún problema con esto.

    
respondido por el William T Froggard 29.05.2015 - 01:45
0

Debe determinar cuántas veces desea key code .

set i to 3 -- This is your iterator Stop after 3
repeat until i = 0
  -- do stuff 
  set i to i - 1 -- this will subtract from original first repeat i becomes 2 and so on.
end repeat

Es posible que desees todo esto en un bloque tell para Safari.

Espero que esto ayude.     
respondido por el bjbk 29.05.2015 - 01:08

Lea otras preguntas en las etiquetas