【问题标题】:How Can I communicate with Chrome(Chrome Extension) using C#?如何使用 C# 与 Chrome(Chrome 扩展)进行通信?
【发布时间】:2012-12-04 08:33:48
【问题描述】:

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

我可以使用“XMLHttpRequest”将信息传递给 C#,但问题是,它在我的页面加载时就开始了。

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

  1. 当我打开我的 chrome 时,我的扩展程序将自动启动,并且我的 background.cs(背景页面)也将启动。 (这里我想要一些客户端-服务器类型的通信)

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

  3. 一旦我的扩展程序收到此消息(即 StartFetchingDocument),我的扩展程序应将 contect-sctipt.js 注入所选选项卡。

我知道将数据发送回 C# 所需的其余部分,但在这里我只停留在这一阶段 - 如何将数据从 C# 发送到我的扩展程序(背景页面)。

【问题讨论】:

    标签: c# google-chrome communication


    【解决方案1】:

    嗯...可能有更好的方法,但一种简单的方法可能是在您的 c# 应用程序中打开 HttpListener 并通过扩展程序与它进行通信,如下所示:

    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# 方面:

    using System;
    using System.Net;
    
    
    namespace HttpListenerTEst
    {
        class Program
        {
            private static HttpListener _listener;
    
            static void Main(string[] args)
            {
                _listener = new HttpListener();
                _listener.Prefixes.Add("http://localhost:60024/");
                _listener.Start();
                _listener.BeginGetContext(new AsyncCallback(Program.ProcessRequest), null);
    
                Console.ReadLine();
            }
    
            static void ProcessRequest(IAsyncResult result)
            {
                HttpListenerContext context = _listener.EndGetContext(result);
                HttpListenerRequest request = context.Request;
    
                //Answer getCommand/get post data/do whatever
    
                _listener.BeginGetContext(new AsyncCallback(Program.ProcessRequest), null);
            }
        }
    }
    

    在 ProcessRequest 函数中,您可以读取发布数据或发回一些内容。

    获取帖子数据:

            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();
    

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

    【讨论】:

    • setInterval(投票, 1000);
    • 将其更改为中性 setInterval(getCommand, 1000), @povilasp 。干杯:)
    • 你可以给我发一些例子吗?请,因为我对此很陌生。
    • @SanketShah,上面的代码已经是一个完整的工作示例。只需创建一个扩展或使用您现有的扩展并将 js 代码粘贴到一个文件中。 c# 部分也是如此,它是一个工作控制台应用程序。或者你可以简单的粘贴代码在你的应用中启动 HttpListener 和回调函数,非常简单。
    【解决方案2】:

    大多数谷歌浏览器扩展都是用 HTML、CSS 或 Javascript 编写的。然后,将您的扩展目录捆绑到一个.crx Chrome 扩展文件中就像运行一个简短的Python script 一样简单。但是,C# 可以翻译成 Javascript,您可以为扩展编写自己的业务逻辑。看Script#

    【讨论】:

    • 不是那样的,我想创建一个自动化工具,它可以记录某些 html 事件,例如填写表格并相应地播放,我已经用 C# 为 Internet Explorer 编写了所有内容,但对于 Chrome,我真的没有任何选择怎么办?
    【解决方案3】:

    如果您在RemoteDebugging 的调试模式下启动chrome,然后您可以通过指定的端口连接到它,您也许可以这样做,但这有点麻烦。

    您可以尝试研究 Adob​​e Brackets 是如何做到这一点的,但我觉得它是相同的方法。

    【讨论】:

    • 您能否提供更多信息,因为我对此很陌生?
    • 基本上在我给您的链接中,您将找到有关如何在特定端口上以调试模式启动 chrome 的信息。使用该信息,您可以打开 http:\\localhost: 或该端口的套接字,您将与 chrome 直接链接。我不确定您如何访问扩展程序,但可以打开页面和类似的东西。有关如何执行此操作的更多信息,您可以在 Chrome 的支持论坛上找到,因为它与 C# 无关
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2013-04-07
    相关资源
    最近更新 更多