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 pbcopy
i 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?
Odpowiedzi:
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
kAEGetURL
zawierają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:
zarejestruj swoją aplikację, aby otrzymywać zdarzenie kAEGetURL, i ustaw
CFBundleURLTypes
w Info.plist aplikacji, aby zawierałahttp
ihttps
.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.
źródło