как общаться с настольным приложением из браузера? - PullRequest
14 голосов
/ 24 января 2012

Можно ли общаться с настольным приложением из браузера?

Я хочу сделать что-то подобное,

Допустим, в моем веб-приложении есть кнопка с URL-адресом источника данных, и при нажатии этой кнопки открывается настольное приложение, которое получает URL-адрес этого источника данных и обрабатывает данные с помощью настольного приложения.

Трудно ли делать такие вещи? Есть примеры?

Ответы [ 7 ]

9 голосов
/ 24 января 2012

В Windows просто создать собственный URL-протокол , который вызывается через

<a href="whatever://somedata">..</a>

Это работает в IE, FF и Chrome, хотя в последнемссылка должна быть открыта с помощью JavaScript, чтобы избежать путаницы с омни-баром.

6 голосов
/ 24 января 2012

Вам потребуется что-то, работающее на десктопе, например сервер, и сделать запрос к серверу, чтобы он открыл приложение. Вы можете сделать это с Node.js. Конечно, для этого требуется, чтобы сервер работал на рабочем столе клиента.

В качестве альтернативы можно было бы создать расширение / плагин для браузера и попросить людей установить его. Эти расширения могут , вероятно, запускать приложение на рабочем столе.

1 голос
/ 29 апреля 2015

настольное приложение должно включать в себя небольшой сервер, такой как Jetty.Поскольку домен источника содержимого браузера (например, www.myDomain.com) отличается от домена localhost Jetty, у вас могут возникнуть проблемы с безопасностью.Это должно быть преодолено путем использования CORS (Cross Origin Resource Sharing), который является новым стандартом.Используя CORS, сервер Jetty сообщает браузеру, что он / localhost разрешает междоменный доступ к своим ресурсам, если запросы исходят из исходного домена www.myDomain.com.По соображениям безопасности я бы также заставил Jetty отклонить любой запрос, исходный IP которого не является localhost

1 голос
/ 17 марта 2015

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

У меня есть веб-приложение, используемое в моей компании для взаимодействия со старыми базами данных и плохо организованными файлами.Мне нужен способ, позволяющий пользователям открывать реальные файлы из сети, а не загружать копии, чтобы их можно было редактировать на месте.Рассматривая решение, подобное этому, или пользовательскую схему URI, чтобы небольшому исполняемому файлу, не работающему в фоновом режиме, можно было просто передать имя файла и открыть его непосредственно для пользователя.

1 голос
/ 24 января 2012

Хм, вам нужно что-то вроде клиент-серверного приложения.Сервер представляет собой облегченный http-сервер, который ожидает сообщений от клиента (браузера).Браузер может общаться с вашим сервером, например, через ajax.

0 голосов
/ 26 июля 2017

В дополнение к ответу Алекса К для Windows ... для тех, кто ищет решение для MacOS и Linux.

Linux

Большинство современных дистрибутивов поддерживают стандарты freedesktop, и один из них - настольные файлы . Вы можете создать файл рабочего стола с помощью [service] раздел.

$ cat test.desktop 
[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Comment=My test app
Name=TestApp
Icon=TestIcon
Exec=/opt/test/test.sh %u
DBusActivatable=true
Categories=Network;
MimeType=x-scheme-handler/test;  <------ This is handler for test://somedata URLs 
NoDisplay=false

Скопируйте этот файл в /usr/share/applications/test.desktop

MacOS

Просто добавьте что-то вроде следующего в ваши приложения Info.plist file

    <array>
            <dict>
                    <key>CFBundleTypeIconFile</key>
                    <string>/tmp/test.png</string>
                    <key>CFBundleTypeRole</key>
                    <string>Viewer</string>
                    <key>CFBundleURLName</key>
                    <string>com.mytest</string>
                    <key>CFBundleURLSchemes</key>
                    <array>
                            <string>test</string>  <---- This is handler for test://somedata URLs hit on browser
                    </array>
            </dict>
    </array>
0 голосов
/ 17 февраля 2017

Вы можете легко добавить сервер Fleck WebSocket в настольное приложение, а затем получить к нему доступ с помощью Websocket.

Примечание: только Windows 8 и 10 поддерживают WebSockets через реализацию Microsoft WebSockets, но Fleck будет работать с Windows 7.

https://github.com/statianzo/Fleck Добавить Fleck в ваш проект с помощью диспетчера пакетов NuGet довольно просто:

Install-Package Fleck

Вот пример эха с веб-страницы Fleck (добавьте его в программу C #)выполнить во время запуска):

var server = new WebSocketServer("ws://127.0.0.1:8181");
server.Start(socket =>
{
  socket.OnOpen = () => Console.WriteLine("Open!");
  socket.OnClose = () => Console.WriteLine("Close!");
  socket.OnMessage = message => socket.Send(message);
});

В JavaScript:

var exampleSocket = new WebSocket("ws://127.0.0.1:8181", "protocolOne");

exampleSocket.send("Here's some text that the server is urgently awaiting!");

//and receive (make a listener for the socket) :
exampleSocket.onmessage = function (event) {
  console.log(event.data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...