I want to create a bridge which can communicate between my C# application and extension.
Here is the explanation of what I actually want:
I have created an extension which will get details of HTML element.
But starts every time I start Chrome. Instead of doing this, is there any way I can send a message to my chrome extension to get HTML element details and then send it back to C# application?
I am able to pass information to C# using 'XMLHttpRequest' but issue is, it got started when my page gets loaded.
Let me explain to you what I want:
When I open my chrome, my extension will start automatically and also my background.cs(background page) will start. (Here I want some client-server kind of communication)
Using my C# application I will send some data to the chrome extension (e.g. StartFetchingDocument)
Once my extention gets this message (i.e. StartFetchingDocument), then my extension should inject contect-sctipt.js to the selected tab.
I know the rest of what I need to send that data back to C#, but here I got stuck only at this one stage - how to send data from C# to my extension (background page).
If you only need to send a single message to another part of your extension (and optionally get a response back), you should use the simplified runtime. sendMessage or tabs. sendMessage. This lets you send a one-time JSON-serializable message from a content script to extension, or vice versa, respectively.
A Chrome extension will typically consist of various cohesive parts or components, each with a different set of responsibilities. In order for all these components to work together, they communicate via messaging.
Chrome extensions are built with HTML, JavaScript, and CSS scripts and are essentially small websites uploaded to the Chrome store.
Your browsing history: The app or extension can read and erase your browsing history. Your tabs and browsing activity: The app or extension can see the URLs and titles of websites you visit.
Hm...there's probably better ways, but an easy way might be opening an HttpListener in your c# app and communicate with it from the extension like this:
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);
In the example i'm using jQuery.post, which can be added to the extension context, but you could use XMLHttpRequest if you like it better. And on the c# side:
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);
}
}
}
In the ProcessRequest function you can read post data or send something back.
Get post data:
string postData;
using (var reader = new StreamReader(request.InputStream, request.ContentEncoding))
{
postData = reader.ReadToEnd();
//use your favourite json parser here
}
and send back some stuff with:
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();
Just some quick brainstorming, looking forward to better ideas :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With