Ejecute Javascript en un Safari específico usando Applescript

0

Habrá muchos navegadores Safari ejecutándose en mi máquina. Quiero ejecutar algunos comandos de javascript en un Safari específico usando los PID 's.

Aquí tengo el código en Applecript:

tell application "System Events"
    set proc to item 1 of (processes whose unix id is 2375)
    tell proc
        using terms from application "Safari"
            tell proc to do JavaScript "" in document 1
       end using terms from
     end tell
end tell

donde 2375 es una de las ID de proceso del navegador Safari que se ejecuta. Pero ejecutar este Applecript me da el error:

System Events got an error: "" doesn’t understand the “do JavaScript” message.

Parece que el comando tell va a los eventos del sistema, en lugar de a Safari.

¿Dónde estoy cometiendo el error?

Editar:

Con la lucha, se me ocurrió esta solución:

on run argv
    set pid to item 1 of argv
    set fileLocation to item 2 of argv
    tell application "System Events"
        set theprocs to every process whose unix id is pid
        repeat with proc in theprocs
            set the frontmost of proc to true
        end repeat
    end tell

    tell application "System Events" to set frontApp to name of first process whose frontmost is true

    if (frontApp = "Safari") then
        using terms from application "Safari"
            tell application frontApp to activate
            set theScript to "document.querySelector(\"input[name='fileField']\").click()"
            tell application frontApp to do JavaScript theScript in document 1
        end using terms from

        tell application "System Events" to tell process frontApp
            keystroke "G" using {command down, shift down}
            delay 2
            key code 51
            delay 2
            keystroke fileLocation
            delay 2
            key code 52
            delay 5
            key code 52
            delay 5
        end tell

        tell application "System Events"
            set theprocs to every process whose unix id is pid
            repeat with proc in theprocs
                set the frontmost of proc to false
            end repeat
        end tell

    end if
end run

Un problema que estoy enfrentando es la parte:

if (frontApp = "Safari") then
            using terms from application "Safari"
                tell application frontApp to activate

está abriendo la otra aplicación Safari, en lugar de la aplicación cuyo frontmost es true (Estoy haciendo que frontmost es true para el pid dado en la primera parte del script). ¿Alguna idea de dónde estoy cometiendo el error?

    
pregunta Ant's 24.02.2015 - 06:50

0 respuestas

Lea otras preguntas en las etiquetas