Подтвердить что ты не робот

Регистрация обработчика протокола URL на нескольких платформах

Я хочу создать приложение Java, установленное на нескольких платформах (Windows, Mac OS, Linux) в составе этой установки. Я хочу зарегистрировать обработчик протокола URL, чтобы мое приложение загружалось при нажатии ссылок.

то есть. Я хочу что-то вроде этого: myprotocol://example.com

Есть ли какой-нибудь консолидированный способ сделать это? Или какая-то структура, которая экстраполирует разницу между различными ОС.

4b9b3361

Ответ 1

MultiBit реализует это на разных платформах

Я только что пошел по этому пути для проекта MultiBit (легкий Bitcoin клиент), где мне пришлось реализовать запуск и обновление приложения в ответ на пользовательский URI (в моем случае bitcoin:1sdfjsdfdkfdkjfdjfkjertn?amount=0.5&label=Some%20Text).

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

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

Например, в мире Mac есть библиотека EAWT, которая недоступна для распространения, но обеспечивает доступ к API-интерфейсу родных событий. Это означает, что ваше приложение должно иметь возможность находить эту библиотеку во время выполнения, а затем рефлексивно работать с родными классами (вы не можете их жестко закодировать, поскольку не можете гарантировать, что вы создадите приложение на платформе с поддержкой библиотеки, и вы не можете включить его из-за ограничений лицензии). Если это звучит как тяжелая работа - поверьте мне это.

В Windows вам необходимо обновить реестр, чтобы ваше приложение было запущено, когда кто-то использует этот протокол. Существует полезный набор инструкций, предоставленных Microsoft, описывающий этот процесс.

В Linux эти команды обычно используют трюк для Gnome 2 (передача URI в командной строке):

gconftool-2 -t string -s /desktop/gnome/url-handlers/bitcoin/command "bin/multibit %s"
gconftool-2 -s /desktop/gnome/url-handlers/bitcoin/needs_terminal false -t bool
gconftool-2 -t bool -s /desktop/gnome/url-handlers/bitcoin/enabled true

Изменить июль 2014

В Linux с Gnome 3 (Ubuntu 11.04+) ситуация отличается от бит, опираясь на файл exampleapp.desktop, расположенный в папке /usr/share/applications, а затем sudo update-desktop-database.

Достаточно говорить - дай код!

Вы можете найти его в исходном коде MultiBit. Я не потрудился вытащить его в свой собственный проект, но сверлить в пакет platform и просто вытащить код оттуда должно быть достаточно (оно самодостаточно). Приложение устанавливает с помощью IzPack, поэтому записи реестра для Windows также могут использоваться.

Код был впервые представленный в ветке v0.3, но будет основным с 1-го квартала 2012 года. Это все лицензии MIT, чтобы вы могли делать все, что вам нравится, Если вы обнаружите ошибки, сообщите об этом или, лучше, исправьте их и предложите запрос на перенос, чтобы другие могли воспользоваться.

Ответ 2

В Windows вы можете изменить реестр в своем установщике,

REGEDIT4

[HKEY_CLASSES_ROOT\your_protocol]
@="URL: your_protocol"
"URL Protocol"="Your protocol name"

[HKEY_CLASSES_ROOT\your_protocol\DefaultIcon]
@="your_prog_location\your_prog.exe"

[HKEY_CLASSES_ROOT\your_protocol\shell]

[HKEY_CLASSES_ROOT\your_protocol\shell\open]

[HKEY_CLASSES_ROOT\your_protocol\shell\open\command]
@="your_prog_location\your_prog.exe %1"

Ответ 3

В качестве альтернативы, используя проект JDIC, ​​вы можете связывать файлы с конкретными приложениями.

Это может быть полезно для ваших предложений. Но вместо регистрации всего протокола (который может быть как-то сложным) вы можете зарегистрировать только тип файла.

Итак, ссылка вроде этого:

 <a href="http://example.com/file.dan">Dan File</a>

Может быть открыт с вашим приложением.

Здесь пример кода для регистрации вашего приложения, чтобы открыть этот тип файла:

AssociationService serv = new AssociationService();
Association logassoc = new Association();

logassoc.addFileExtension("DAN"); 
logassoc.addAction( new Action("open", "C:\\WINDOWS\\JAVA.EXE -jar C:\\dan.jar %1"));

Здесь полная статья: Общие сведения о ассоциациях типов файлов JDIC

Ответ 4

Я бы рекомендовал вам использовать Java Webstart вместо того, чтобы пытаться изобрести новую схему ссылок. Он уже поддерживается любым браузером, на котором установлена ​​Sun Java.