В настоящее время я пытаюсь изменить поведение обработки URL-адреса по умолчанию в OS X. Я хотел бы, нажимая на любую ссылку за пределами веб-браузера, скопировать этот URL-адрес в монтажную панель вместо того, чтобы открывать его в веб-браузере по умолчанию - например, щелкнув ссылку в разговоре Skype, вы должны скопировать этот URL-адрес в монтажную панель OS X вместо того, чтобы открывать ее в Firefox (который в настоящее время является моим веб-браузером по умолчанию).
Я думал о решениях, но в настоящее время я не могу его реализовать. Если я смогу создать приложение, которое помещает URL-адреса в буфер обмена, которые ему отправляют, и могу установить это приложение в качестве веб-браузера по умолчанию, я смогу достичь своей цели.
Я создал приложение с Automator, которое выполняет команду оболочки, pbcopy
и установил это приложение в качестве веб-браузера по умолчанию, но я не получил ожидаемого результата. Я провел некоторое тестирование и могу подтвердить, что приложение запускается при нажатии на ссылку, однако я не могу передать URL-адрес скрипту приложения / оболочки. Я попробовал оба stdin или переданный аргумент, но безуспешно.
Есть ли способ для приложения, созданного с помощью Automator, получить выбранный URL-адрес и отправить его pbcopy
, когда это приложение установлено в качестве (по умолчанию) обработчика для URL-адресов?
В качестве альтернативы, есть ли лучший способ создать фальшивый веб-браузер, который принимает входные данные и помещает их в монтажную панель, чем Automator? Или есть какой-то другой способ достичь своей цели без специального приложения / скрипта?
Ответы:
Способ открытия URL в Mac OS X на самом деле сложнее, чем вы думаете. Когда вы щелкаете URL-адрес, Mac OS X не просто передает браузеру открываемый URL-адрес; вместо этого он отправляет событие Apple с идентификатором
kAEGetURL
, содержащим URL-адрес.Я никогда не использовал Automator (он слишком медленный и ограниченный для моего обычного использования), поэтому я не уверен в этом, но сомневаюсь, что он способен обрабатывать события Apple. Поэтому вы не сможете использовать Automator для достижения того, что вы хотите.
Поэтому вам придется прибегнуть к обычному приложению Objective-C в Xcode.
Две основные вещи, которые вам нужно сделать:
зарегистрируйте свое приложение для получения события kAEGetURL и установите
CFBundleURLTypes
в Info.plist своего приложения включениеhttp
иhttps
.Реализуйте метод, обрабатывающий событие 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, и она должна быть скопирована прямо в буфер обмена.
источник