MultiBit реализует это на разных платформах
Я только что прошел этот путь для проекта MultiBit (облегченный биткойн клиент), где мне пришлось реализовать запуск и обновление приложения в ответ на пользовательский URI (в моем случае bitcoin:1sdfjsdfdkfdkjfdjfkjertn?amount=0.5&label=Some%20Text
).
Способ, которым я должен был это реализовать, заключался в создании общего подхода к получению событий операционной системы. Большая часть этой работы была основана на библиотеке Macify , а затем переписана для поддержки нескольких произвольных платформ.
Сначала немного предыстории. Обычно обработчики протоколов регистрируются на стороне операционной системы, а не на стороне браузера. Это связано с тем, что протоколы не ограничиваются браузерами, поэтому необходим общий механизм поддержки. Следовательно, вам нужно создавать обработчики для каждой платформы, которую вы хотите поддерживать.
Например, в мире 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, так что вы можете делать с ней все что угодно. Если вы обнаружите ошибки, сообщите о них или, что еще лучше, исправьте их и предложите запрос на извлечение информации, чтобы другие могли получить выгоду.