Як отримати доступ до натиснутої URL-адреси в додатку для обробки URL-адрес, створеному в Automator


14

В даний час я намагаюся змінити поведінку обробки URL-адреси за замовчуванням в OS X. Я хотів би, натиснувши будь-яке посилання за межами веб-браузера, скопіювати цю URL-адресу на картону замість відкриття в веб-браузері за замовчуванням - наприклад , натиснувши посилання в бесіді через Skype, слід скопіювати цю URL-адресу на картону OS X замість того, щоб відкривати її у Firefox (який зараз є моїм веб-браузером за замовчуванням).

Я думав про рішення, але наразі не в змозі його втілити. Якщо я можу створити додаток, який додає URL-адреси на папку, що надсилаються на нього, і можу встановити цю програму як веб-браузер за замовчуванням, я зможу досягти своєї мети.

Я створив додаток з Automator, який виконує команду shell pbcopyі встановив цю програму як мій веб-браузер за замовчуванням, але я не отримав очікуваного результату. Я провів тестування і можу підтвердити, що програма працює при натисканні на посилання, однак я не можу передати URL-адресу до сценарію програми / оболонки. Я спробував і stdin, або аргументований аргумент, але без успіху.

Чи існує можливість програми, створеної за допомогою Automator, отримати натиснуту URL-адресу та надіслати її pbcopy, коли ця програма встановлена ​​як (за замовчуванням) обробник URL-адрес?

Крім того, чи є кращий спосіб створити підроблений веб-браузер, який бере вхід і поміщає його в картону, ніж Automator? Або є якийсь інший спосіб, що я можу досягти своєї мети без спеціального додатка / сценарію?


Не ставити це як відповідь, оскільки це не повне рішення, але це початок - я використовував rubicode.com/Software/RCDefaultApp, щоб встановити додаток автоматизатора як браузер за замовчуванням. В Автоматизаторі є дія Копіювати в буфер обміну. Я просто не можу отримати жодне введення тексту до програми автоматизації.
пінгвінроб

Дітто, але я використав Choosy. Я зробив досить багато тестування, і я виявив наступне: 1) Додаток Automator дійсно працює. 2) Схоже, це взагалі не отримує ніякого вкладу. 3) Ерго, коли браузеру надсилається "посилання", йому не надсилається URL в простому тексті. З цим слід вирішуватись по-різному, і це справді питання.
Тимофі Мюллер-Хардер

Відповіді:


13

Спосіб відкриття URL-адреси в Mac OS X насправді складніший, ніж ви могли подумати. Після натискання URL-адреси Mac OS X не просто передає URL-адресу браузера, щоб відкрити його; натомість він надсилає йому Apple Event, з ідентифікатором kAEGetURL, що містить URL.

Я ніколи не використовував Automator (це занадто повільно і обмежено для мого типового використання), тому я не впевнений у цьому, але сумніваюся, він має можливість обробляти Apple Events. Тому ви не зможете використовувати Automator для досягнення того, що ви хочете.

Тому вам доведеться вдатися до звичайного додатка Objective-C у Xcode.

Дві основні речі, які вам потрібно зробити:

  1. зареєструйте свою програму для отримання події kAEGetURL та встановіть CFBundleURLTypesу її інформаційному списку додатка включення httpта https.

  2. Реалізуйте метод обробки події kAEGetURL і змусьте його скопіювати URL у буфер обміну.

Ці дві речі порівняно просто зробити в Objective-C; для ілюстрації, я створив зразок програми, яка робить це. Ви можете переглянути його на https://github.com/houbysoft/short/tree/master/Copy%20URL%20to%20Clipboard . Найважливіший файл - https://github.com/houbysoft/short/blob/master/Copy%20URL%20to%20Clipboard/Copy%20URL%20to%20Clipboard/AppDelegate.m , там ви можете побачити, як зареєструватися для отримання подія (це робиться в методі applicationWillFinishLaunching:) та як скопіювати його у буфер обміну (це робиться у методі getUrl: withReplyEvent:).

Якщо ви лінуєтесь і просто хочете побачити, що це працює, візьміть цей файл , витягніть програму з нього, встановіть це як веб-браузер за замовчуванням (відкрийте налаштування Safari та перегляньте цей додаток у полі веб-браузера за замовчуванням). Потім натисніть на посилання в Skype, і його слід скопіювати прямо у буфер обміну.


Спасибі за вашу відповідь. Я не знав, як проходити URL в OSX. Я поглянув на ваш код, але я дуже не знаю Objective-C. Але ваша додаткова робота працює як шарм, і це те, чого я хотів з самого початку. Знову дякую!
DjDCH

Приємна робота над додатком (нехай). Я хотів би нагородити нагороду, але мені не вистачає певної інформації щодо питання, чи може Автоматизатор (або не може) бути примушеним визнати подію kAEGetURL для цього.
kopischke

@kopischke: Я просто шукав довідку Automator, щоб згадати події Apple, і нічого не було знайдено. Я думаю, що справедливо вважати, що Automator цього не підтримує.
houbysoft

Це можливо зробити за допомогою AppleScript, що було б "логічним" способом розширити робочий процес Автоматизатора, не заглиблюючись у XCode / ObjC та не склавши власний додаток. (не те, що все так складно, але, мабуть, AppleScript було б простіше.)
ocodo

Схоже, це не працює 10.11. "/ Програми / Копіювати URL у Clipboard.app недоступно як браузер HTTP"
TJ Luoma
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.