Applescript: ho creato un codice di scorrimento automatico e ho bisogno di sapere come fermarlo

0

Modifica: questo è il codice più recente che ho ora ... Come posso arrestarlo (cambia il valore di x) quando eseguo uno script separato?

    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
    
posta Phoenix Ebner 28.05.2015 - 23:51
fonte

3 risposte

1

Possiamo usare defaults per memorizzare e leggere valori (digitare man defaults in una finestra Terminal.app per leggere ulteriori informazioni al riguardo).

Esegui 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

... e interrompilo 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"


Puoi anche eseguirlo direttamente in Terminal.app o utilizzarlo in shell script , in questo modo:

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

Note

Ho inserito set frontmost to true nel ciclo repeat poiché l'utente poteva attivare un'altra app mentre lo script è in esecuzione, il che farebbe confusione dell'intera faccenda.

Non abbiamo davvero bisogno di usare un property per com.chrome.scroll ma dal momento che il codice ha bisogno di quei dati in due punti e potresti volerlo cambiare, l'ho fatto in questo modo.

Se vuoi cambiarlo, usa qualcosa di unico, senza caratteri e spazi speciali. iTunes , ad esempio, utilizza com.apple.iTunes e Finder utilizza com.apple.Finder . Di solito un application usa il bundle identifier come domain per defaults .

    
risposta data 29.05.2015 - 01:58
fonte
1

Ho rifatto lo script, di nuovo. Quel codice prima era ridicolo tbh. Ho avuto un po 'di anticipo su di me ... Proviamo di nuovo ... Salva questa applicazione come "rimani aperto" di nuovo, chiamata nulla. Dovrai semplicemente uscire quando vuoi interrompere lo scorrimento e riavviarlo quando vuoi continuare. Vi consiglio di metterlo sul vostro Dock per un facile accesso:

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

Dimmi se hai qualche problema con questo.

    
risposta data 29.05.2015 - 01:45
fonte
0

Devi determinare quante volte vuoi 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

Potresti volere tutto questo in un blocco tell per Safari.

Spero che questo ti aiuti.     
risposta data 29.05.2015 - 01:08
fonte

Leggi altre domande sui tag