如何从浏览器与桌面应用程序通信?

Gih*_*ita 15 javascript browser

是否可以从浏览器与桌面应用程序通信?

我想做这样的事,

假设我的Web应用程序中有一个按钮,其中包含指向数据源的URL,当单击按钮时,桌面应用程序将打开并获取该数据源URL并使用桌面应用程序处理数据.

做这样的事情难吗?任何例子?

Ale*_* K. 9

在Windows上,它可以创建一个可以通过调用的自定义URL协议

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

这适用于IE,FF和Chrome,但在后者中必须通过javascript打开链接以避免全方位混淆.


Ale*_*pin 6

您需要在桌面上运行某些内容,例如服务器,并向服务器发出请求,以便服务器打开应用程序.你可以用Node.js做到这一点.当然,这需要服务器在客户端的桌面上运行.

另一种方法是制作浏览器扩展/插件,让人们安装它.这些扩展可能在桌面上启动应用程序.

  • 感谢您提供的信息,我在http://www.codeproject.com/Articles/36517/Communicating-from-the-Browser-to-a-Desktop-Applic上找到了类似的东西 (2认同)
  • 它应该带有一个警告:从安全角度来看,运行本地服务器不是一个好主意。如果处理不当,它是获取系统权限的一个重要攻击媒介。此外,其他网站也可以在您不知情的情况下打开相同的应用程序。 (2认同)

小智 5

您可以轻松地将 Fleck WebSocket 服务器添加到您的桌面应用程序,然后使用 Websocket 访问它。

注意:只有 Windows 8 和 10 通过 Microsoft 的 WebSockets 实现支持 WebSockets,但 Fleck 将适用于 Windows 7。

https://github.com/statianzo/Fleck 使用 NuGet 包管理器将 Fleck 添加到您的项目中非常容易:

Install-Package Fleck
Run Code Online (Sandbox Code Playgroud)

以下是来自 Fleck 网页的 echo 示例(将其添加到 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);
});
Run Code Online (Sandbox Code Playgroud)

在 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);
}
Run Code Online (Sandbox Code Playgroud)