Как получить доступ к нажатому URL-адресу в приложении-обработчике URL, созданном в Automator

14

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

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

Я создал приложение с Automator, которое выполняет команду оболочки, pbcopyи установил это приложение в качестве веб-браузера по умолчанию, но я не получил ожидаемого результата. Я провел некоторое тестирование и могу подтвердить, что приложение запускается при нажатии на ссылку, однако я не могу передать URL-адрес скрипту приложения / оболочки. Я попробовал оба stdin или переданный аргумент, но безуспешно.

Есть ли способ для приложения, созданного с помощью Automator, получить выбранный URL-адрес и отправить его pbcopy, когда это приложение установлено в качестве (по умолчанию) обработчика для URL-адресов?

В качестве альтернативы, есть ли лучший способ создать фальшивый веб-браузер, который принимает входные данные и помещает их в монтажную панель, чем Automator? Или есть какой-то другой способ достичь своей цели без специального приложения / скрипта?

DjDCH
источник
Не воспринимать это как ответ, так как это не полное решение, но это начало - я использовал rubicode.com/Software/RCDefaultApp, чтобы установить приложение автоматизатора в качестве браузера по умолчанию. В Automator есть действие для копирования в буфер обмена. Я просто не могу получить текстовый ввод в приложение Automator.
Пингвинроб
То же самое, но я использовал Choosy. Я провел немало испытаний и обнаружил следующее: 1) Приложение Automator действительно запускается. 2) Кажется, он не получает никакой информации. 3) Поэтому, когда браузеру отправляется «ссылка», ему не отправляется URL в виде открытого текста. Это должно решаться по-другому, и это действительно то, что вопрос после.
Тимоти Мюллер-Хардер

Ответы:

13

Способ открытия URL в Mac OS X на самом деле сложнее, чем вы думаете. Когда вы щелкаете URL-адрес, Mac OS X не просто передает браузеру открываемый URL-адрес; вместо этого он отправляет событие Apple с идентификатором kAEGetURL, содержащим URL-адрес.

Я никогда не использовал Automator (он слишком медленный и ограниченный для моего обычного использования), поэтому я не уверен в этом, но сомневаюсь, что он способен обрабатывать события Apple. Поэтому вы не сможете использовать Automator для достижения того, что вы хотите.

Поэтому вам придется прибегнуть к обычному приложению Objective-C в Xcode.

Две основные вещи, которые вам нужно сделать:

  1. зарегистрируйте свое приложение для получения события kAEGetURL и установите CFBundleURLTypesв Info.plist своего приложения включение 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, и она должна быть скопирована прямо в буфер обмена.

houbysoft
источник
Спасибо за ваш ответ. Я не знал, как работает URL в OSX. Я взглянул на ваш код, но не очень хорошо знаю Objective-C. Но ваше получившееся приложение работает как шарм, и это то, что я хотел с самого начала. Еще раз спасибо!
DjDCH
Хорошая работа над приложением (пусть). Я хотел бы вручить награду, но мне не хватает определенной информации по вопросу, можно ли (или нельзя) заставить Automator признать событие kAEGetURL, чтобы сделать это.
копишке
@kopischke: Я только что искал справку Automator для любого упоминания событий Apple, и ничего не было найдено. Я думаю, будет справедливо предположить, что Automator не поддерживает это.
Houbysoft
Это можно сделать с помощью AppleScript, который станет «логичным» способом расширения рабочего процесса Automator, не углубляясь в XCode / ObjC и не компилируя собственное приложение. (не то чтобы все было так сложно, но, скорее всего, AppleScript был бы проще.)
ocodo
Это не похоже на работу на 10.11. «/ Applications / Копировать URL-адрес в Clipboard.app недоступен в качестве HTTP-браузера»
TJ Luoma