Tengo un poco de AppleScript que es frustrante que los demonios fuera de mí. Necesito obtener una lista de todas las pestañas de Safari, luego filtrar hacia abajo. Yo estaba esperando que esto es muy simple. No.
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
Primero de todo, every tab of every window
devuelve una lista anidada de las listas de pestañas (agrupados por la ventana) en lugar de sólo una lista plana. Yo sólo terminé yendo con repeticiones. (Si no es una manera de hacer este one-liner, sería bueno). Pero hasta ahora, muy bien.
El resultado que estaba recibiendo de la first item of tabSet
me arrojando porque parecía que se estaba volviendo un formulario 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 el filtro de la línea de donde trato de obtener el first item of tabSet whose name is "Untitled"
. (Reemplazar con un nombre válido de curso). 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 puso de manifiesto que, una vez más, el problema no era como parecía, pero en realidad era algo completamente diferente:
Sólo las fichas en la ventana situada en primer plano puede ser filtrada. Parece que la declaración first item of tabSet whose name is "Untitled"
falla si la pestaña de "sin Título" es en cualquier otra ventana de la ventana situada en primer plano.
Alguna idea?