如何使用C#与Chrome(Chrome扩展)通信?

如何使用C#与Chrome(Chrome扩展)通信?,c#,google-chrome,communication,C#,Google Chrome,Communication,我想创建一个可以在我的C#应用程序和扩展之间通信的桥梁。 以下是我真正想要的解释: 我已经创建了一个扩展,它将获取HTML元素的详细信息。 但每次我启动Chrome时都会启动。除了这样做,还有什么方法可以将消息发送到我的chrome扩展以获取HTML元素的详细信息,然后将其发送回C#应用程序 我能够使用“XMLHttpRequest”将信息传递给C#,但问题是,它是在我的页面加载时启动的 让我向你解释我想要什么: 当我打开我的chrome浏览器时,我的扩展将自动启动,我的background.c

我想创建一个可以在我的C#应用程序和扩展之间通信的桥梁。
以下是我真正想要的解释: 我已经创建了一个扩展,它将获取HTML元素的详细信息。
但每次我启动Chrome时都会启动。除了这样做,还有什么方法可以将消息发送到我的chrome扩展以获取HTML元素的详细信息,然后将其发送回C#应用程序

我能够使用“XMLHttpRequest”将信息传递给C#,但问题是,它是在我的页面加载时启动的

让我向你解释我想要什么:

  • 当我打开我的chrome浏览器时,我的扩展将自动启动,我的background.cs(后台页面)也将启动。(这里我需要一些客户机-服务器类型的通信)

  • 使用我的C#应用程序,我将向chrome扩展发送一些数据(例如StartFetchingDocument)

  • 一旦我的扩展名收到此消息(即StartFetchingDocument),那么我的扩展名应该将contect-sctipt.js插入到所选选项卡中


  • 我知道我需要将数据发送回C#的其余部分,但我只在这一阶段遇到了困难——如何将数据从C#发送到我的扩展(背景页)。

    如果你在调试模式下启动chrome,然后通过指定端口连接到它,你可能可以做到这一点,但这有点麻烦


    你可以试着研究Adobe括号是如何做到这一点的,但我觉得这是同样的方法。

    大多数google chrome扩展都是用HTML、CSS或Javascript编写的。然后,将扩展目录绑定到
    .crx
    Chrome扩展文件中,只需运行一个短程序即可。但是,C#可以翻译成Javascript,您可以为扩展编写自己的业务逻辑。看看

    嗯……可能有更好的方法,但一个简单的方法可能是在你的c#应用程序中打开一个应用程序,并通过如下扩展与之通信:

    var listener = "http://localhost:60024/";
    
    function getCommand(){
    
        var postData = { 
            "action": "getCommand" 
        };
    
        $.post( listener, postData, function(response){
            //Parse response and do whatever c# wants
        });
    }
    
    function send(data){
    
        var postData = {
            "action" : "send",
            "data": data
        };
    
        $.post(listener, postData);
    }
    
    
    setInterval(getCommand, 1000);
    
    在这个示例中,我使用jQuery.post,它可以添加到扩展上下文中,但是如果您更喜欢,可以使用XMLHttpRequest。在c#端:

    在ProcessRequest函数中,您可以读取post数据或发送返回的内容

    获取post数据:

            string postData;
            using (var reader = new StreamReader(request.InputStream, request.ContentEncoding))
            {
                postData = reader.ReadToEnd();
                //use your favourite json parser here
            }
    
    并寄回一些带有:

            string responseString           = "This could be json to be parsed by the extension";
    
            HttpListenerResponse response   = context.Response;
            response.ContentType            = "text/html";
    
            byte[] buffer                   = System.Text.Encoding.UTF8.GetBytes(responseString);
            response.ContentLength64        = buffer.Length;
            Stream output                   = response.OutputStream;
    
            output.Write(buffer, 0, buffer.Length);
            output.Close();
    

    只是一些快速的头脑风暴,期待更好的想法:)

    不是这样的,我想创建一个自动工具,可以记录某些html事件,如填写表单和播放。我用C语言为Internet explorer编写了所有内容,但对于Chrome,我真的没有任何选择如何做到这一点?你能给我更多关于它的信息吗,因为我对这一点非常陌生?基本上,在我给你的链接中,你会找到关于如何在特定端口上以调试模式启动Chrome的信息。有了这些信息,您就可以打开http:\\localhost:或该端口的套接字,这样您就可以与chrome直接链接。我不知道你如何访问扩展,但是打开的页面和类似的东西你可以。关于如何做到这一点的更多信息,你可以在Chrome的支持论坛上找到,因为它与C#setInterval无关(民意调查,1000);将其更改为中性设置间隔(getCommand,1000),@povilasp。干杯:)你能给我举个例子吗?求你了,因为我对这个很陌生。@SanketShah,上面的代码已经是一个完全有效的例子了。只需创建一个扩展名,或者使用现有的扩展名并将js代码粘贴到一个文件中。c#部分也是如此,它是一个可以工作的控制台应用程序。或者,您可以简单地粘贴代码,在应用程序中启动HttpListener和回调函数,这非常简单。
            string responseString           = "This could be json to be parsed by the extension";
    
            HttpListenerResponse response   = context.Response;
            response.ContentType            = "text/html";
    
            byte[] buffer                   = System.Text.Encoding.UTF8.GetBytes(responseString);
            response.ContentLength64        = buffer.Length;
            Stream output                   = response.OutputStream;
    
            output.Write(buffer, 0, buffer.Length);
            output.Close();