我只是为了类似的目的而试图弄清楚这一点。故事的寓意是您要么需要使用“本地消息传递”(Chrome 基本上将其称为已部署的 .EXE),要么创建一个使用 JavaScript 与您的应用程序对话的扩展。
https://developer.chrome.com/extensions
https://developer.chrome.com/extensions/nativeMessaging
这与 IE 不同,您可以简单地将底层 DOM 分配给一个对象。 Chrome 不会以同样的方式公开 API 或底层 DOM。
我解决这个问题的方法是使用 C# 中的 WebSocket 服务器(SuperWebSocketin NuGet)和 Chrome 扩展中的 Javascript 来调用所述 WebSocket 服务器。对于 Chrome 扩展程序,JavaScript 在后台运行,因此您可以连接并建立会话来来回传递消息。
以下是如何启动 WebSocket 客户端的示例:
https://github.com/kerryjiang/SuperWebSocket/blob/master/Samples/BasicConsole/Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SuperSocket.SocketBase;
namespace SuperWebSocket.Samples.BasicConsole
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Press any key to start the WebSocketServer!");
Console.ReadKey();
Console.WriteLine();
var appServer = new WebSocketServer();
//Setup the appServer
if (!appServer.Setup(2012)) //Setup with listening port
{
Console.WriteLine("Failed to setup!");
Console.ReadKey();
return;
}
appServer.NewMessageReceived += new SessionHandler<WebSocketSession, string>(appServer_NewMessageReceived);
Console.WriteLine();
//Try to start the appServer
if (!appServer.Start())
{
Console.WriteLine("Failed to start!");
Console.ReadKey();
return;
}
Console.WriteLine("The server started successfully, press key 'q' to stop it!");
while (Console.ReadKey().KeyChar != 'q')
{
Console.WriteLine();
continue;
}
//Stop the appServer
appServer.Stop();
Console.WriteLine();
Console.WriteLine("The server was stopped!");
Console.ReadKey();
}
static void appServer_NewMessageReceived(WebSocketSession session, string message)
{
//Send the received message back
session.Send("Server: " + message);
}
}
}
这是尝试新 WebSocket 连接的示例 JavaScript:
function attemptConnection() {
if (!connectionMade) {
var exampleSocket = new WebSocket("ws://localhost:8080");
exampleSocket.onopen = function () {
connectionMade = true;
};
exampleSocket.onmessage = function (event) {
//msg received from C#
}
exampleSocket.onerror = function () {
//do nothing
}
exampleSocket.onclose = function () {
connectionMade = false;
}
}
}
您可以使用任何您想要的 WebSocket 服务器库。它的要点是 Chrome 扩展程序打开与您的应用程序的通信线路,然后这两个来回传递消息,Chrome 扩展程序或应用程序可以对其进行操作。例如,C# 可以传递包含您要在网页上更新的字段元素的 Chrome 扩展 JSON。
另外,请记住,您必须将 Chrome 扩展程序部署到 Chrome 网上应用店(并在需要时设置为私有),否则它将自动禁用。