Ответ 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, чтобы вы могли делать все, что вам нравится, Если вы обнаружите ошибки, сообщите об этом или, лучше, исправьте их и предложите запрос на перенос, чтобы другие могли воспользоваться.