Applescript: abra la pestaña actual de Safari en Chrome (Solución de problemas del script de trabajo)

Entonces, hace un tiempo decidí ejecutar una instalación de Safari sin Flash. Ha sido realmente genial, Safari parece mucho más estable en general y apenas lo extraño.

Pero de vez en cuando me tropiezo con un sitio que requiere flash (principalmente videos de YouTube, que pensé que no serían un problema dado que se suponía que Google cambiaría todo a HTML5), así que para esos casos tengo un Appescript que se ejecuta cuando se activa a través de un Alfred Workflow (con una tecla de acceso rápido). El guión es como tal:

tell application "Safari"

    set theURL to URL of current tab of window 1

end tell

tell application "Google Chrome"

    if windows ≠ {} then
        make new tab at the end of window 1 with properties {URL:theURL}
    else
        make new window
        set URL of active tab to theURL
    end if
    activate

end tell

tell application "Safari"

    close current tab of window 1

end tell

Por lo general, esto funciona perfectamente, pero me encuentro con un problema extraño cada vez que Chrome no tiene una ventana abierta en segundo plano. En estos casos, Chrome abrirá una nueva ventana (en blanco) y la secuencia de comandos se detendrá allí. La tercera declaración de Tell,

 tell application "Safari"

    close current tab of window 1

end tell

Nunca se ejecutará, dejándome con una ventana cromada abierta y una ventana safari abierta también. Solo después de presionar la tecla de acceso rápido por segunda vez, después de que la ventana de Chrome ya esté abierta, el Script ejecutará su curso y abrirá la página en Chrome/cerrará la pestaña en Safari.

¿Algunas ideas? Estoy realmente confundido por el hecho de que la tercera instrucción Tell no se ejecutará en absoluto. Si la ventana de Chrome se abrió en blanco pero la pestaña de safari aún se cerró, supongo que fue un simple error en la declaración if/else, pero el hecho de que el script parece terminar realmente me deja perplejo en este caso.

Sabes que Safari tiene una función incorporada para esto, ¿verdad? Develop-> Open Page With-> Google Chrome. Puede asignar una tecla de acceso rápido para esta acción en las preferencias del sistema
Sí, pero esto es en realidad parte de un script más grande que me permite hacer lo mismo en ambas direcciones; Safari a Chrome y Chrome a Safari. Además, a diferencia del script, el método que mencionas no cerrará la ventana de Safari que se abre en Chrome.

Respuestas (2)

El hecho de que Safari y Chrome se estén ejecutando no significa que tengan una ventana abierta. Puede probar las ventanas abiertas como señala Mark o simplemente emitir el comando de reapertura que abre una nueva ventana si no existe una.

tell application "Google Chrome"
    if not (exists window 1) then reopen
    -- insert your code 
end tell

tell application "Safari"
    if not (exists document 1) then reopen
    -- insert your code 
end tell

EDITAR

tell application "Safari"
    if not (exists document 1) then return
    set theURL to URL of current tab of window 1
    close current tab of window 1
end tell

tell application "Google Chrome"
    if not (exists window 1) then reopen
    set URL of active tab of window 1 to theURL
end tell
¿Un voto negativo sin explicación?
@adayzone, ¿el "método correcto es" hacer qué en relación con esta pregunta?
Hola, Mark. El método correcto para garantizar que Chrome o Safari tengan una ventana abierta para evitar los errores que recibe Carlos es emitir el comando de reapertura. Si existe, deja la ventana actual como está, si no, abre una nueva
Sí, no estoy seguro de qué hacer con esto :/. Puede ser obvio para alguien con un poco más de conocimiento de Applescript, pero para mí, personalmente, esta respuesta me deja con más preguntas xD (en una nota al margen, ya respondiste algunas de mis preguntas antes, ¡así que gracias por eso!)
Ahhh, ya veo, te refieres específicamente al uso de 'reabrir'... Ya veo adónde quieres llegar.
@adayzdone, si actualiza su respuesta con una explicación más completa, estoy más que feliz de votarla de nuevo :-). Mientras lo hace, también puede tener en cuenta si Safari se vuelve a abrir en Topsits: puede recibir un error porque no hay URL
¡La edición funciona perfectamente! De hecho, resuelve una pequeña molestia con el otro método, en el que si Chrome no estaba abierto en absoluto, la nueva ventana se abriría con dos pestañas (una en blanco y otra con el contenido enviado). ¡Gracias!
"si Safari se vuelve a abrir en Topsits: puede recibir un error porque no hay URL". Es por eso que lo excluí de mi EDITAR. Añadiré una explicación.
@Carlos Veo a qué te refieres con las dos pestañas. Eso es molesto. E iba a sugerir que aceptara la respuesta de adayzone. Pero ya lo tienes :-)
@markhunte jaja Seré honesto, ¡me sentí un poco mal por no aceptar el tuyo! Espero que haya una forma de reconocer ambos, aparte de los votos positivos, ya que ambos me ayudaron no solo a solucionar mi problema, sino también a profundizar mi comprensión de Applescript. Pero como solo puede haber una, y terminé usando la versión de adayzdone, tendré que aceptar esa :) ¡gracias de nuevo!
@Carlos no te sientas mal. Creo que hiciste lo correcto en este caso e iba a sugerirte que lo hicieras. Siempre puedes votar el mío como útil si lo encuentras así.
@markhunte Rechacé tu respuesta debido a una pestaña adicional. Edítalo y lo revertiré.
@adayzdone Lo dejaré como está. La pregunta no pedía eliminar la pestaña adicional. Esa fue una ventaja en tu respuesta. Y mi respuesta no se refería a eso. Siéntase libre de votar a favor o en contra. Todo es constructivo. Al igual que originalmente voté negativamente su respuesta, lo que lo llevó a dar una mejor respuesta más completa que no fue confusa y, al final, fue aceptada por eso.
Ups. Debo haber asumido que Carlos no quería una cuenta extra. De cualquier manera, no se puede revertir la votación hasta que se haya realizado una edición.

Alfred puede estar protegiéndolo de un error que ocurre si Chrome se está ejecutando pero no tiene ninguna ventana abierta.

Google Chrome recibió un error: No se puede configurar la pestaña activa en "http...".

cambiar las lineas

  make new window
  set URL of active tab to theURL

a

set theWindow to make new window

set URL of active tab of theWindow to theURL
Ah, ¿así que fue algo de Alfred? Pensé que este podría haber sido el caso al principio, pero todo el último asunto de decir que no se ejecuta me hizo pensar que era algo para hacer específicamente. con Applescript. ¡Sin embargo, tu arreglo funcionó de maravilla! ¡Gracias!