2 votos

Servicios de error que prematuramente se activa una aplicación

He descubierto algo muy extraño bug con los Servicios.

Para ser testigos de este comportamiento, siga los siguientes pasos:

  • Asegúrese de que Safari se encuentra en el Dock.

  • Abrir Automator. Crear un nuevo Servicio.

  • Configurar el servicio para recibir "ninguna entrada" en "cualquier aplicación."

  • Inserte un "Ejecutar AppleScript" de acción.

  • Pegue el siguiente en la acción:

    on run {input, parameters}
    
        delay 5
        display dialog "Hello"      
        tell application "Safari" to activate
    
        return input
    end run
    
  • Guarde el Servicio.

  • Cerrar el Servicio.

  • Vuelva a abrir el Servicio.

  • Automator debe presentar un cuadro de diálogo preguntando, "¿desea instalar el "ServiceName" servicio?" Haga Clic En "Instalar".

  • Cuando se da la "Instalación completa" de diálogo, haga clic en "Hecho".

Ahora, ejecute el Servicio. Para ello, haga clic en el título de la aplicación en la esquina superior izquierda de la pantalla (el segundo elemento en la barra de menú). A continuación, haga clic en el título.

Usted notará que el Safari va a abrir de inmediato (evidenciado por el punto negro debajo de su logotipo en el Dock). Safari se abrirá antes de que el retraso de 5 segundos y antes de que el "Hola" aparecerá el cuadro de diálogo.

La colocación de la activate declaración en una subrutina no se soluciona el problema.

Alguien puede confirmar que esto es un bug? Estoy convencido de que este es un error con la función Servicios porque cuando se ejecuta el Servicio desde dentro de Automator (haciendo clic en el botón "play" en la esquina superior derecha de la ventana de Automator), el código se ejecuta correctamente.

Si esto es un error, ¿alguien tiene una solución para que la aplicación no está abierta antes de que el anterior código se ejecuta?


Mi Macbook Pro es el sistema operativo OS X de El Capitan, 10.11.6.


El error puede estar relacionado con otra pieza de comportamiento extraño que he notado:

  • Salir de Safari.aplicación y Automator.la aplicación, si se están ejecutando.

  • Tire hacia arriba de la carpeta donde los Servicios del equipo se almacenan (/Usuarios/Me/Biblioteca/Servicios/) en el Finder.

  • Haga clic en el Servicio de archivo y abrir el archivo con Automator.

Usted notará que la apertura de la .archivo de flujo de trabajo con Automator activará Safari. No debería hacer eso.

2voto

user3439894 Puntos 5883

La única solución que he encontrado después de probar varios escenarios diferentes que se utiliza para ajustar el Safari de comandos dentro de una do shell script comando, por ejemplo do shell script "osascript -e 'tell application \"Safari\" to activate'". Tenga en cuenta que con osascript, múltiples −e de las opciones pueden ser dados para construir un multi-línea de comandos.

Desde la página de manual de osascript:

−e instrucción

Introduzca una línea de un script. Si −e es dado, osascript no buscar un nombre de archivo en la lista de argumentos. Varios −e de las opciones puede ser dado para construir un multi-línea de comandos. Debido a que la mayoría de los guiones uso de caracteres que son especiales para muchos de los programas de shell (por ejemplo, AppleScript, usa comillas simples y dobles, "(", ")", y "*"), la declaración deberá ser correctamente citado y se escapó para conseguir más allá de la cáscara intacta.

Ejemplo de AppleScript código:

tell application "Safari"
    activate
    make new document in front
    set URL of front document to "http://apple.stackexchange.com/questions/271133/services-bug-that-prematurely-activates-an-application"
end tell

Un ejemplo de la AppleScript código anterior, escrito como un do shell script comando usando osascript con la -e opción, según sea necesario.

do shell script "osascript -e 'tell application \"Safari\"' -e 'activate' -e 'make new document in front' -e 'set URL of front document to \"http://apple.stackexchange.com/questions/271133/services-bug-that-prematurely-activates-an-application\"' -e 'end tell'"

Como se puede ver, cada línea de AppleScript código de la normal tell instrucción de bloque es su propia -e opción, y como se señaló en la página de manual de osascript con la -e opción, escapando con una barra diagonal inversa que se ha hecho necesario para el código para compilar correctamente antes de que se ejecute.

En otras palabras, esta vez de la normal tell instrucción de bloque y de sus comandos de una sola línea- do shell script comando para eludir el aparente error en el escenario de caso de uso se presentan en la OP.

Tenga en cuenta que usted debe ser capaz de hacer algo similar con las otras aplicaciones activadas por el mismo error, mediante la sustitución de la correspondiente solicitud nombre (y comandos), según sea necesario.

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