Safari AppleScript - Impossibile filtrare le schede di Windows inattive

4

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?

    
posta Whimsical Seaplane 01.06.2018 - 22:04
fonte

1 risposta

0

Questo è il modo in cui AppleScript fa riferimento a elementi dagli elenchi. Non stai facendo nulla di sbagliato.

Quando dici "primo elemento" di un elenco, ottieni "l'elemento 1 di { qualche elenco }", che è letteralmente equivalente al primo elemento nell'elenco come ti aspetteresti in altre lingue.

Tutti e 3 di questi sono equivalenti e si riferiscono esattamente alla stessa cosa, anche se mostrano in modo diverso.

tab 1 of window id 1
item 1 of {tab 1 of window id 1}
item 1 of {tab 1 of window id 1, tab 2 of …, …}

Puoi ottenere proprietà da questo elemento come se non fosse mai stato in un elenco.

set targetName to name of targetTab -- gets the name of the tab

Potrebbe essere fonte di confusione venire da altre lingue per vedere l'intero elenco mostrato quando si desidera un singolo elemento, ma è probabile per le prestazioni, dal momento che non tenta di estrarre nulla dall'elenco o anche mostrare una rappresentazione diversa di l'elemento solo perché non vuoi vedere il resto dell'elenco in una sorta di output.

    
risposta data 01.06.2018 - 22:12
fonte

Leggi altre domande sui tag