Ich versuche derzeit, das Verhalten der Standard-URL-Verarbeitung in OS X zu ändern. Wenn ich auf einen Link außerhalb eines Webbrowsers klicke, möchte ich diese URL in das Pasteboard kopieren, anstatt sie beispielsweise im Standard-Webbrowser zu öffnen Wenn Sie in einer Skype-Konversation auf einen Link klicken, sollte diese URL in das OS X-Pasteboard kopiert werden, anstatt sie in Firefox (derzeit mein Standardwebbrowser) zu öffnen.
Ich habe über Lösungen nachgedacht, kann aber derzeit keine implementieren. Wenn ich eine Anwendung erstellen kann, die URLs in das Pasteboard einfügt, die an sie gesendet werden, und diese Anwendung als Standardwebbrowser festlegen kann, kann ich mein Ziel erreichen.
Ich habe mit Automator eine Anwendung erstellt, die den Shell-Befehl ausführt, pbcopy
und diese Anwendung als Standard-Webbrowser festgelegt, aber ich habe nicht das erwartete Ergebnis erhalten. Ich habe einige Tests durchgeführt und kann bestätigen, dass die Anwendung beim Klicken auf einen Link ausgeführt wird. Die URL kann jedoch nicht an das Anwendungs- / Shell-Skript übergeben werden. Ich habe sowohl Standard als auch ein bestandenes Argument ausprobiert, aber ohne Erfolg.
Gibt es eine Möglichkeit für eine mit Automator erstellte Anwendung, eine angeklickte URL abzurufen und an diese zu senden pbcopy
, wenn diese Anwendung als (Standard-) Handler für URLs festgelegt ist?
Gibt es eine bessere Möglichkeit, einen gefälschten Webbrowser zu erstellen, der die Eingaben aufnimmt und in das Pasteboard einfügt als Automator? Oder gibt es eine andere Möglichkeit, mein Ziel ohne eine benutzerdefinierte Anwendung / ein benutzerdefiniertes Skript zu erreichen?
Antworten:
Die Art und Weise, wie URLs unter Mac OS X geöffnet werden, ist komplizierter als Sie denken. Wenn Sie auf eine URL klicken, übergibt Mac OS X dem Browser nicht nur die zu öffnende URL. Stattdessen sendet es ein Apple-Ereignis mit der ID
kAEGetURL
, die die URL enthält.Ich habe Automator nie wirklich benutzt (es ist einfach viel zu langsam und für meinen typischen Gebrauch zu begrenzt), daher bin ich mir nicht sicher, aber ich bezweifle, dass es Apple Events verarbeiten kann. Daher können Sie Automator nicht verwenden, um das zu erreichen, was Sie wollen.
Sie müssen daher in Xcode auf eine normale Objective-C-App zurückgreifen.
Die zwei grundlegenden Dinge, die Sie tun müssen, sind:
Registrieren Sie Ihre App für den Empfang des kAEGetURL-Ereignisses und legen Sie
CFBundleURLTypes
in der Info.plist Ihrer App fest, dasshttp
und enthalten sindhttps
.Implementieren Sie eine Methode, die das Ereignis kAEGetURL behandelt, und kopieren Sie die URL in die Zwischenablage.
Diese beiden Dinge sind in Objective-C relativ einfach zu tun; Zur Veranschaulichung habe ich eine Beispielanwendung erstellt, die dies ausführt. Sie können es unter https://github.com/houbysoft/short/tree/master/Copy%20URL%20to%20Clipboard anzeigen . Die wichtigste Datei ist https://github.com/houbysoft/short/blob/master/Copy%20URL%20to%20Clipboard/Copy%20URL%20to%20Clipboard/AppDelegate.m . Dort können Sie sehen, wie Sie sich für das registrieren event (dies geschieht in der applicationWillFinishLaunching: -Methode) und wie man es in die Zwischenablage kopiert (dies geschieht in der getUrl: withReplyEvent: -Methode).
Wenn Sie sich faul fühlen und nur sehen möchten, dass dies funktioniert, greifen Sie auf diese Datei zu , extrahieren Sie die Anwendung, legen Sie sie als Standardwebbrowser fest (öffnen Sie die Safari-Einstellungen und suchen Sie diese App im Feld Standardwebbrowser). Klicken Sie dann in Skype auf Ihren Link, und dieser sollte direkt in Ihre Zwischenablage kopiert werden.
quelle