14 votos

Cómo acceder a una URL en la que se ha hecho clic en una aplicación de gestión de URLs creada en Automator

Actualmente estoy tratando de modificar el comportamiento de manejo de URLs por defecto en OS X. Yo

He pensado en soluciones, pero de momento no soy capaz de poner en práctica ninguna. Si puedo crear una aplicación que ponga en la mesa de trabajo las URLs que se le envían, y puedo establecer esta aplicación como el navegador web por defecto, sería capaz de lograr mi objetivo.

He creado una aplicación con Automator que ejecuta el comando shell pbcopy y he establecido esta aplicación como mi navegador web por defecto, pero no he obtenido 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 obtener la URL pasó a la aplicación / shell script. He intentado tanto stdin o un argumento pasado, pero sin éxito.

¿Existe una forma de que una aplicación creada con Automator recupere una URL pulsada y la envíe a pbcopy cuando esa aplicación se establece como gestor (por defecto) de URLs?

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

0 votos

No pongo esto como respuesta ya que no es una solución completa, pero es un comienzo - usé rubicode.com/Software/RCDefaultApp para establecer una aplicación de Automator como navegador por defecto. En Automator, hay una acción para Copiar al Portapapeles. Pero no consigo introducir ningún texto en una aplicación de Automator.

0 votos

Lo mismo digo, pero he utilizado Choosy. He hecho bastantes pruebas y he encontrado lo siguiente: 1) La aplicación Automator se ejecuta. 2) Parece que no recibe ningún tipo de entrada. 3) Ergo, cuando a un navegador se le envía un "enlace", no se le envía una URL en texto plano. Esto debe ser manejado de alguna manera diferente, y eso es realmente lo que busca la pregunta.

13voto

GaryF Puntos 11921

La forma de abrir una URL en Mac OS X es en realidad más complicada de lo que se cree. Cuando haces clic en una URL, Mac OS X no se limita a pasarle al navegador la URL para que la abra, sino que le envía un Apple Event, con el ID kAEGetURL que contiene la URL.

Nunca he utilizado 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, usted no será capaz de utilizar Automator para lograr lo que quieres.

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 establezca el CFBundleURLTypes en el Info.plist de su aplicación para incluir http y https .

  2. Implementa un método que maneje el evento kAEGetURL, y haz que copie la URL al portapapeles.

Estas dos cosas son relativamente sencillas de hacer en Objective-C; para ilustrarlo, he creado una aplicación de ejemplo que hace esto. Puedes verla en https://github.com/houbysoft/short/tree/master/Copy%20URL%20to%20Clipboard . El archivo más importante es https://github.com/houbysoft/short/blob/master/Copy%20URL%20to%20Clipboard/Copy%20URL%20to%20Clipboard/AppDelegate.m Allí puedes ver cómo registrarte en 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 da pereza y sólo quieres ver que esto funciona, coge este archivo Extrae la aplicación de ella, establécela como navegador web predeterminado (abre las Preferencias de Safari y busca esa aplicación en el campo Navegador web predeterminado). A continuación, haz clic en tu enlace en Skype, y debería copiarse directamente en tu portapapeles.

0 votos

Gracias por su respuesta. No sabía cómo se procedía con la URL en OSX. He echado un vistazo a su código, pero no sé Objective-C mucho. Pero, su aplicación resultante funciona como un encanto y que lo que quería desde el principio. Gracias de nuevo.

0 votos

Buen trabajo con la app(let). Me encantaría otorgar la recompensa, pero me falta alguna información definitiva sobre la cuestión de si Automator puede (o no) ser coaccionado para reconocer un evento kAEGetURL para hacerlo.

0 votos

@kopischke: Acabo de buscar en la ayuda de Automator alguna mención a los eventos de Apple y no he encontrado nada. Creo que es justo asumir que Automator no soporta esto.

1voto

user3325776 Puntos 11

Paso 1: Instalar código abierto y mantenido activamente https://github.com/johnste/finicky . Finicky es una aplicación que permite dirigir los enlaces a diferentes navegadores en función de las reglas que se especifiquen. Para que esto funcione, Finicky debe ser su navegador por defecto.

Paso 2: Abre el editor script, pega el siguiente código y guárdalo como aplicación. Llamémosla UrlHandler.app:

on open location input
    set the clipboard to input
end open location

Paso 3: Especificar a qué navegador debe enviar Finicky los enlaces por defecto. En ~/.finicky.js cambia el defaultBrowser por el UrlHandler.app del paso 2.

module.exports = {
  defaultBrowser: "com.apple.ScriptEditor.id.UrlHandler",
  ...

Aquí hay una configuración alternativa que envía los enlaces a UrlHandler.app sólo cuando se hace Command-clic en un enlace:

module.exports = {
  defaultBrowser: "Firefox",
  handlers: [
    {
      match: ({ keys }) => keys.command,
      browser: "com.apple.ScriptEditor.id.UrlHandler"
    }
  ]
};

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