Jak uzyskać dostęp do klikniętego adresu URL w aplikacji do obsługi adresów URL utworzonej w programie Automator

14

Obecnie próbuję zmodyfikować domyślne zachowanie obsługi adresów URL w systemie OS X. Chciałbym, klikając dowolny link poza przeglądarką internetową, skopiować ten adres URL na pulpit zamiast otwierać go w domyślnej przeglądarce internetowej - na przykład , kliknięcie linku w rozmowie Skype powinno skopiować ten adres URL do płyty OS X zamiast otwierać go w przeglądarce Firefox (która jest obecnie moją domyślną przeglądarką internetową).

Myślałem o rozwiązaniach, ale obecnie nie jestem w stanie ich wdrożyć. Jeśli uda mi się stworzyć aplikację, która umieszcza adresy URL na wysyłanym do niej stole, i mogę ustawić tę aplikację jako domyślną przeglądarkę internetową, byłbym w stanie osiągnąć swój cel.

Utworzyłem aplikację za pomocą Automatora, która wykonuje polecenie powłoki pbcopyi ustawiłem tę aplikację jako moją domyślną przeglądarkę internetową, ale nie uzyskałem oczekiwanego rezultatu. Przeprowadziłem testy i mogę potwierdzić, że aplikacja działa po kliknięciu linku, jednak nie mogę przekazać adresu URL do skryptu aplikacji / powłoki. Próbowałem zarówno standardowego, jak i pozytywnego argumentu, ale bezskutecznie.

Czy istnieje sposób, aby aplikacja utworzona za pomocą Automatora mogła pobrać kliknięty adres URL i wysłać go pbcopy, gdy ta aplikacja jest ustawiona jako (domyślna) procedura obsługi adresów URL?

Alternatywnie, czy istnieje lepszy sposób na stworzenie fałszywej przeglądarki internetowej, która pobiera dane wejściowe i umieszcza je na stole montażowym niż Automator? Czy jest jakiś inny sposób, w jaki mogę osiągnąć swój cel bez niestandardowej aplikacji / skryptu?

DjDCH
źródło
Nie stanowi to odpowiedzi, ponieważ nie jest to kompletne rozwiązanie, ale to początek - użyłem rubicode.com/Software/RCDefaultApp, aby ustawić aplikację automatyzatora jako domyślną przeglądarkę. W Automatorze jest czynność Skopiuj do schowka. Po prostu nie mogę wprowadzić tekstu do aplikacji automatora.
penguinrob
To samo, ale użyłem Choosy. Przeprowadziłem sporo testów i znalazłem, co następuje: 1) Aplikacja Automator nie działa. 2) Wydaje się, że w ogóle nie otrzymuje żadnego wkładu. 3) Ergo, kiedy do przeglądarki wysyłany jest „link”, nie jest wysyłany adres URL w postaci zwykłego tekstu. Trzeba sobie z tym poradzić w inny sposób i właśnie o to chodzi.
Timothy Mueller-Harder

Odpowiedzi:

13

Sposób, w jaki otwieranie adresów URL w Mac OS X jest w rzeczywistości bardziej skomplikowane niż mogłoby się wydawać. Po kliknięciu adresu URL system Mac OS X nie tylko przekazuje przeglądarce adres URL do otwarcia; zamiast tego wysyła do niego zdarzenie Apple z identyfikatorem kAEGetURLzawierającym adres URL.

Nigdy tak naprawdę nie korzystałem z Automatora (jest to po prostu zbyt powolne i ograniczone do mojego typowego zastosowania), więc nie jestem tego pewien, ale wątpię, czy ma on zdolność obsługi zdarzeń Apple. Dlatego nie będziesz mógł użyć Automatora do osiągnięcia tego, co chcesz.

Dlatego będziesz musiał skorzystać z normalnej aplikacji Objective-C w Xcode.

Dwie podstawowe rzeczy, które musisz zrobić, to:

  1. zarejestruj swoją aplikację, aby otrzymywać zdarzenie kAEGetURL, i ustaw CFBundleURLTypesw Info.plist aplikacji, aby zawierała httpi https.

  2. Zaimplementuj metodę obsługującą zdarzenie kAEGetURL i skopiuj adres URL do schowka.

Te dwie rzeczy są stosunkowo łatwe do zrobienia w Celu C; dla zilustrowania, stworzyłem przykładową aplikację, która to robi. Możesz go wyświetlić na https://github.com/houbysoft/short/tree/master/Copy%20URL%20to%20Clipboard . Najważniejszym plikiem jest https://github.com/houbysoft/short/blob/master/Copy%20URL%20to%20Clipboard/Copy%20URL%20to%20Clipboard/AppDelegate.m , tam możesz zobaczyć, jak zarejestrować się na zdarzenie (odbywa się to w metodzie applicationWillFinishLaunching: metoda) i jak skopiować je do schowka (odbywa się to w metodzie getUrl: withReplyEvent:).

Jeśli czujesz się leniwy i chcesz tylko zobaczyć, czy to działa, pobierz ten plik , rozpakuj aplikację, ustaw go jako domyślną przeglądarkę internetową (otwórz Preferencje Safari i wyszukaj tę aplikację w polu Domyślna przeglądarka internetowa). Następnie kliknij link w Skype i należy go skopiować bezpośrednio do schowka.

houbysoft
źródło
Dziękuję za Twoją odpowiedź. Nie wiedziałem, jak postępować URL w OSX. Rzuciłem okiem na twój kod, ale nie znam zbytnio Objective-C. Ale twoja aplikacja działa jak urok i to, czego chciałem od samego początku. Dzięki jeszcze raz!
DjDCH,
Dobra robota w aplikacji (niech). Chciałbym nadać nagrodę, ale brakuje mi ostatecznych informacji na temat tego, czy Automator może (lub nie może) zostać zmuszony do potwierdzenia zdarzenia kAEGetURL, aby to zrobić.
kopischke
@kopischke: Właśnie przeszukałem pomoc Automatora pod kątem jakiejkolwiek wzmianki o zdarzeniach Apple i nic nie znaleziono. Myślę, że można uczciwie założyć, że Automator tego nie obsługuje.
houbysoft
Można to zrobić za pomocą AppleScript, co byłoby „logicznym” sposobem na rozszerzenie przepływu pracy Automatora, bez zagłębiania się w XCode / ObjC i kompilowania własnej aplikacji. (nie żeby to wszystko było skomplikowane, ale prawdopodobnie AppleScript byłby łatwiejszy.)
ocodo
Wydaje się, że to nie działa 10.11. „/ Aplikacje / Kopiuj adres URL do Clipboard.app nie jest dostępny jako przeglądarka HTTP”
TJ Luoma,