diff options
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..3974f39 --- /dev/null +++ b/README.md @@ -0,0 +1,43 @@ +# VK Player Controller +VK Player Controller - приложение для OS X, позволяющее контролировать аудиоплеер vk.com медиа-клавишами (F7-F9) и иметь доступ к плейлисту из статусбара. + +#### Поддерживаемые браузеры: +* Chrome (+Opera, +Яндекс.Браузер) - *без расширения или с ним* +* Safari - *только без расширения* +* Firefox - *с расширением* + +#### Поддерживаемые системы +Должно работать без проблем на OS X 10.8 и выше. + +# Скриншоты +![](https://ch1p.com/vkpc/screenshots/dark_p.png) ![](https://ch1p.com/vkpc/screenshots/light_p.png) + +# Некоторые технические подробности +#### Внедрение JavaScript +Для того, чтобы получить доступ к плееру в браузере, нужно внедрить свой JavaScript-код во вкладку. Существует два способа сделать это: + +* через AppleScript *(работает в Chrome, Яндекс.Браузере и Safari)* +* через расширение *(работает в Firefox, Opera + опционально в Chrome и Яндекс.Браузере)* + +Поскольку у Firefox и Opera нет AppleScript API для выполнения JavaScript-кода в контексте вкладки, им нужно расширение. + +Судя по тому, что сообщали некоторые пользователи, метод AppleScript иногда не работает. Не очень понятно, от чего это зависит и как это воспроизвести, но на этот случай есть возможность включить режим расширения - для Chrome и Яндекс.Браузера. +Теоретически такой workaround возможен и в Safari, но под него расширение еще не портировано (предлагаю желающим заняться этим :), поэтому там альтернативы нет. + +#### Как приложение общается с брауером +Для того, чтобы внедренный во вкладку скрипт имел возможность отправлять данные приложению и принимать их от него, приложение поднимает локальный WebSocket-сервер (с поддержкой SSL) на 127.0.0.1:56130 (в данный момент для SSL используется сертификат, выданный для домена vkpc-local.ch1p.com и истекающий 16 августа 2017 года. О том, зачем это нужно – ниже). + +Когда в плеере на сайте происходит какое-то событие (например, вы переключаете трек), скрипт через WS отправляет его приложению. Когда происходит событие в самом приложении (например, вы нажали F7 или кликнули на трек в плейлисте из статусбара), сообщение отправляется скрипту, который уже переключает трек на сайте. + +Если vk.com открыт по https, браузер запрещает открывать WebSocket-соединение по http. Поэтому в качестве хака скрипт подключается не к 127.0.0.1, а к vkpc-local.ch1p.com, который указывает на 127.0.0.1. + +#### libwebsockets +Для реализации WebSocket используется библиотека libwebsockets (https://github.com/warmcat/libwebsockets). +Нужно собрать ее с поддержкой SSL, установить заголовочные файлы и подключить libwebsockets.dylib к проекту. + +# По вопросам +... можно писать сюда: https://vk.com/ez + + +P.S. Исторически сложилось, что однажды написанный говнокод в vkpc.js больше не менялся (нет желания туда лезть), его бы переписать... + |