Tengo un poco de AppleScript que me frustra mucho. Necesito obtener una lista de todas las pestañas de Safari, luego filtrarlas. Esperaba que esto fuera muy simple. No lo es.
tell application "Safari"
set tabSet to {}
repeat with w in (get every window)
repeat with t in (get every tab of w)
set the end of tabSet to t
end repeat
end repeat
--set tabSet to every tab of every window -- a one-liner here would be convenient
set firstTab to first item of tabSet -- works, see edit
set targetTab to first item of tabSet whose name is "Untitled" -- this fails
end tell
En primer lugar, every tab of every window
devuelve una lista anidada de listas de pestañas (agrupadas por ventana) en lugar de solo una lista plana. Acabo de terminar con las repeticiones. (Si hay es una manera de hacer que esto sea de una sola línea, sería bueno). Pero hasta ahora, todo bien.
El resultado que estaba obteniendo de first item of tabSet
me estaba desechando porque parecía que estaba devolviendo una forma de toda la lista:
item 1 of {tab 1 of window id 15557 of application "Safari", tab 2 of window id 15557 of application "Safari", tab 3 of window id 15557 of application "Safari", tab 4 of...
El problema real se produce en la línea de filtro donde trato de obtener el first item of tabSet whose name is "Untitled"
. (Reemplazar con un nombre válido por supuesto). Entonces, me sale este error:
error "Safari got an error: Can’t get tab 1 of window id 15561 whose name = \"Untitled\". Invalid index." number -1719
EDIT 2:
He añadido el siguiente bloque:
repeat with t in tabSet
set n to (get name of t)
try
set targetTab to (first item in tabSet whose name is n)
set targetWindow to (first window whose tabs contains targetTab)
log (get id of targetWindow) & (get name of t)
on error
log "ERROR: " & n
end try
end repeat
Esto reveló que, una vez más, el problema no era lo que parecía, sino que era algo completamente diferente:
Solo se pueden filtrar las pestañas en la ventana frontal . Parece que la declaración first item of tabSet whose name is "Untitled"
falla si la pestaña "Sin título" está en una ventana que no sea la ventana frontal.
¿Alguna idea?