Comment accéder à une URL cliquée dans une application de gestion d'URL créée dans Automator

14

J'essaie actuellement de modifier le comportement de gestion d'URL par défaut dans OS X. Je voudrais, lorsque vous cliquez sur un lien en dehors d'un navigateur Web, copier cette URL dans la table de montage au lieu de l'ouvrir dans le navigateur Web par défaut - par exemple , cliquer sur un lien dans une conversation Skype devrait copier cette URL dans le presse-papiers OS X au lieu de l'ouvrir dans Firefox (qui est actuellement mon navigateur Web par défaut).

J'ai pensé à des solutions, mais je ne suis actuellement pas en mesure d'en mettre en œuvre. Si je peux créer une application qui place des URL dans la table de montage qui lui sont envoyées et peut définir cette application comme navigateur Web par défaut, je serais en mesure d'atteindre mon objectif.

J'ai créé une application avec Automator qui exécute la commande shell pbcopyet j'ai défini cette application comme mon navigateur Web par défaut, mais je n'ai pas obtenu le résultat attendu. J'ai fait quelques tests et je peux confirmer que l'application s'exécute en cliquant sur un lien, cependant, je ne peux pas faire passer l'URL au script d'application / shell. J'ai essayé à la fois stdin ou un argument passé, mais sans succès.

Existe-t-il un moyen pour une application créée avec Automator de récupérer une URL cliquée et de l'envoyer à pbcopy, lorsque cette application est définie comme gestionnaire (par défaut) pour les URL?

Sinon, existe-t-il un meilleur moyen de créer un faux navigateur Web qui prend l'entrée et la place dans le presse-papiers qu'Automator? Ou existe-t-il un autre moyen d'atteindre mon objectif sans application / script personnalisé?

DjDCH
la source
Ne pas mettre cela comme une réponse car ce n'est pas une solution complète, mais c'est un début - j'ai utilisé rubicode.com/Software/RCDefaultApp pour définir une application d'automate comme navigateur par défaut. Dans Automator, il existe une action à copier dans le presse-papiers. Je ne parviens tout simplement pas à saisir de texte dans une application d'automatisation.
penguinrob
Idem, mais j'ai utilisé Choosy. J'ai fait pas mal de tests et j'ai trouvé ce qui suit: 1) L'application Automator fonctionne. 2) Il ne semble pas y avoir d'entrée du tout. 3) Ergo, lorsqu'un navigateur reçoit un "lien", il ne reçoit pas d'URL en texte brut. Cela doit être traité d'une manière différente, et c'est vraiment la question qui se pose.
Timothy Mueller-Harder

Réponses:

13

La façon dont l'ouverture d'URL dans Mac OS X est en fait plus compliquée que vous ne le pensez. Lorsque vous cliquez sur une URL, Mac OS X ne transmet pas simplement au navigateur l'URL à ouvrir; au lieu de cela, il lui envoie un événement Apple, avec l'ID kAEGetURL, contenant l'URL.

Je n'ai jamais vraiment utilisé Automator (c'est juste trop lent et limité pour mon utilisation typique), donc je ne suis pas sûr de cela, mais je doute qu'il ait la capacité de gérer les événements Apple. Par conséquent, vous ne pourrez pas utiliser Automator pour obtenir ce que vous voulez.

Vous devrez donc recourir à une application Objective-C normale dans Xcode.

Les deux choses de base que vous devez faire sont:

  1. enregistrez votre application pour recevoir l'événement kAEGetURL et définissez le CFBundleURLTypesdans Info.plist de votre application pour inclure httpet https.

  2. Implémentez une méthode gérant l'événement kAEGetURL et faites-lui copier l'URL dans le presse-papiers.

Ces deux choses sont relativement simples à faire dans Objective-C; pour illustrer, j'ai créé un exemple d'application qui fait cela. Vous pouvez le consulter sur https://github.com/houbysoft/short/tree/master/Copy%20URL%20to%20Clipboard . Le fichier le plus important est https://github.com/houbysoft/short/blob/master/Copy%20URL%20to%20Clipboard/Copy%20URL%20to%20Clipboard/AppDelegate.m , où vous pouvez voir comment vous inscrire au (cela se fait dans la méthode applicationWillFinishLaunching:) et comment le copier dans le presse-papiers (cela se fait dans la méthode getUrl: withRselfEvent:).

Si vous vous sentez paresseux et que vous voulez juste voir si cela fonctionne, saisissez ce fichier , extrayez-en l'application, définissez-le comme navigateur Web par défaut (ouvrez les préférences de Safari et recherchez cette application dans le champ Navigateur Web par défaut). Cliquez ensuite sur votre lien dans Skype, et il devrait être copié directement dans votre presse-papiers.

houbysoft
la source
Merci pour votre réponse. Je ne savais pas comment l'URL se déroulait dans OSX. J'ai jeté un œil à votre code, mais je ne connais pas beaucoup Objective-C. Mais, votre application résultante fonctionne comme un charme et c'est ce que je voulais depuis le début. Merci encore!
DjDCH
Beau travail sur l'application (let). J'adorerais accorder la prime, mais je manque des informations définitives sur la question de savoir si Automator peut (ou ne peut pas) être contraint de reconnaître un événement kAEGetURL pour ce faire.
kopischke
@kopischke: Je viens de chercher dans l'aide d'Automator toute mention d'événements Apple, et rien n'a été trouvé. Je pense qu'il est juste de supposer qu'Automator ne prend pas cela en charge.
houbysoft
Il est possible de le faire avec AppleScript, qui serait le moyen "logique" d'étendre un flux de travail Automator, sans plonger dans XCode / ObjC et sans compiler votre propre application. (ce n'est pas si compliqué que ça, mais il est probable qu'AppleScript serait plus facile.)
ocodo
Cela ne semble pas fonctionner sur 10.11. "/ Applications / Copier l'URL dans Clipboard.app n'est pas disponible en tant que navigateur HTTP"
TJ Luoma