Ci saranno molti browser Safari in esecuzione nella mia macchina. Voglio eseguire alcuni comandi javascript su Safari specifici usando PID
.
Ho il codice in applescript per questo qui:
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
dove 2375
è uno degli id di processo del browser Safari in esecuzione. Ma l'esecuzione di questo applescript mi dà l'errore:
System Events got an error: "" doesn’t understand the “do JavaScript” message.
Sembra che il comando tell sia impostato su Eventi di sistema, piuttosto che su Safari.
Dove sto facendo l'errore?
Modifica:
Con la lotta, mi è venuta in mente questa soluzione:
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 che sto affrontando è la parte:
if (frontApp = "Safari") then
using terms from application "Safari"
tell application frontApp to activate
sta aprendo l'altra applicazione Safari, piuttosto che l'applicazione il cui frontmost
è true
(sto rendendo il frontmost
is true
per il dato pid
nella prima parte dello script). Qualche idea, dove sto facendo l'errore?