4 votos

AppleScript Safari - Can ' t filtro Lengüetas de ventanas inactivas

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?

1voto

siva Puntos 23

Esta es la forma en AppleScript se refiere a los elementos de las listas. No estás haciendo nada malo.

Cuando ustedes dicen "primer elemento" de una lista, obtener 'artículo 1 de {algunos de la lista}', que es, literalmente, equivalente al primer elemento de la lista, como era de esperar en otros idiomas.

Todos los 3 de estos son equivalentes y se refieren exactamente a la misma cosa, aunque aparecen de forma diferente.

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 …, …}

Usted puede obtener las propiedades de este elemento como si nunca hubiera estado en una lista.

conjunto de targetName a nombre de targetTab -- obtiene el nombre de la pestaña

Puede ser confuso procedentes de otros idiomas para ver toda la lista que se muestra cuando solo quieres un elemento, pero es probable que para el rendimiento, ya que no intentar extraer algo de la lista, o incluso mostrar una representación diferente de la cosa solo porque no quieres ver el resto de la lista en algún tipo de salida.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X