Ho un po 'di AppleScript che mi rende frustrante. Devo ottenere un elenco di tutte le schede di Safari, quindi filtrarle. Mi aspettavo che fosse molto semplice. Non lo è.
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
Innanzitutto, every tab of every window
restituisce un elenco annidato di elenchi di schede (raggruppati per finestra) anziché solo un elenco semplice. Ho appena finito con le ripetizioni. (Se è un modo per renderlo un one-liner, sarebbe bello). Ma finora, tutto bene.
Il risultato che stavo ottenendo da first item of tabSet
mi ha stornato perché sembrava che restituisse un modulo dell'intero elenco:
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...
Il problema reale si verifica sulla linea del filtro dove cerco di ottenere il first item of tabSet whose name is "Untitled"
. (Sostituire con un nome valido ovviamente). Quindi, ho ricevuto questo errore:
error "Safari got an error: Can’t get tab 1 of window id 15561 whose name = \"Untitled\". Invalid index." number -1719
EDIT 2:
Ho aggiunto il seguente blocco:
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
Questo ha rivelato che, ancora una volta, il problema non era come sembrava, ma in realtà era qualcosa di completamente diverso:
È possibile filtrare solo le schede nella finestra in primo piano . Sembra che l'istruzione first item of tabSet whose name is "Untitled"
non riesca se la scheda "Senza titolo" si trova in una finestra diversa dalla finestra in primo piano.
Qualche idea?