Cómo acceder a una URL en la que se hizo clic en una aplicación de controlador de URL creada en Automator

13

Actualmente estoy intentando modificar el comportamiento de manejo de URL predeterminado en OS X. Me gustaría, al hacer clic en cualquier enlace fuera de un navegador web, copiar esta URL en la mesa de trabajo en lugar de abrirla en el navegador web predeterminado. - por ejemplo, al hacer clic en un enlace en una conversación de Skype debería copiar esta URL en la mesa de trabajo de OS X en lugar de abrirla en Firefox (que actualmente es mi navegador web predeterminado).

He pensado en soluciones, pero actualmente no puedo implementar una. Si puedo crear una aplicación que coloque las URL en la mesa de trabajo que se le envíen y puedo configurar esta aplicación como el navegador web predeterminado, podría lograr mi objetivo.

Creé una aplicación con Automator que ejecuta el comando de shell pbcopy y configuré esta aplicación como mi navegador web predeterminado, pero no obtuve el resultado esperado. Hice algunas pruebas y puedo confirmar que la aplicación se ejecuta al hacer clic en un enlace, sin embargo, no puedo pasar la URL a la aplicación / shell script. He intentado tanto un argumento estándar como un argumento pasado, pero sin éxito.

¿Existe una manera para que una aplicación creada con Automator recupere una URL en la que se haga clic y la envíe a pbcopy , cuando esa aplicación se configura como un controlador (predeterminado) para las URL?

Alternativamente, ¿existe una mejor manera de crear un navegador web falso que tome la entrada y la coloque en la mesa de trabajo que Automator? ¿O hay alguna otra manera de lograr mi objetivo sin una aplicación / script personalizado?

    
pregunta DjDCH 29.03.2012 - 21:50

1 respuesta

12

La forma en que se abre la URL en Mac OS X es en realidad más complicada de lo que parece. Cuando hace clic en una URL, Mac OS X no solo le pasa al navegador la URL para abrirla; en su lugar, le envía un evento de Apple, con el ID kAEGetURL , que contiene la URL.

Nunca utilicé Automator (es demasiado lento y limitado para mi uso típico), así que no estoy seguro de esto, pero dudo que tenga la capacidad de manejar los Eventos de Apple. Por lo tanto, no podrá utilizar Automator para lograr lo que desea.

Por lo tanto, tendrás que recurrir a una aplicación normal de Objective-C en Xcode.

Las dos cosas básicas que debes hacer son:

  1. registre su aplicación para recibir el evento kAEGetURL y configure CFBundleURLTypes en la lista de información de su aplicación para incluir http y https .

  2. Implemente un método que maneje el evento kAEGetURL y haga que copie la URL en el portapapeles.

Estas dos cosas son relativamente sencillas de hacer en Objective-C; para ilustrar, he creado una aplicación de ejemplo que hace esto. Puede verlo en enlace . El archivo más importante es enlace , allí puede ver cómo registrarse para el evento (esto se hace en el método ApplicationWillFinishLaunching:) y cómo copiarlo en el portapapeles (esto se hace en el método getUrl: withReplyEvent:).

Si te sientes perezoso y solo quieres ver que esto funciona, toma este archivo , extraiga la aplicación, configúrelo como navegador web predeterminado (abra las Preferencias de Safari y busque esa aplicación en el campo Navegador web predeterminado). Luego haga clic en su enlace en Skype, y debe copiarse directamente en su portapapeles.

    
respondido por el houbysoft 01.04.2012 - 02:55

Lea otras preguntas en las etiquetas