I’m a big fan of Stack Overflow and I tend to contribute regularly (am currently in the top 0.X%). In this category (stackoverflow) of posts I will will be posting my top rated questions and answers. This, btw, is allowed as explained in the meta thread here.
My question was:
How to hide the cursor in Awesomium – I tried this:
<awe:WebControl x:Name="webBrowser" Cursor="None" Source="http://example.com/"/>
but the cursor still shows.
I figured that I could alter the CSS of the page by adding the following line:
*{ cursor: none; }
But, is there a solution for when I don’t have the access to the actual page that I’m showing?
The answer, by user Sjoerd2228888, was:
You can use a ResouceInterceptor and manipulate the page on the fly to insert custom CSS.
EDIT:
The following implementation should do the job. (It assumes there is a text.css file)
class ManipulatingResourceInterceptor : IResourceInterceptor { public ResourceResponse OnRequest(ResourceRequest request) { Stream stream = null; //do stream manipulation if (request.Url.ToString() == "http://your.web.url/test.css") { WebRequest myRequest; myRequest = WebRequest.Create(request.Url); Stream webStream = myRequest.GetResponse().GetResponseStream(); StreamReader webStreamReader = new StreamReader(webStream); string webStreamContent = webStreamReader.ReadToEnd(); stream = webStream; string extraContent = "*{cursor: none;}"; webStreamContent += extraContent; byte[] responseBuffer = Encoding.UTF8.GetBytes(webStreamContent); // Initialize unmanaged memory to hold the array. int responseSize = Marshal.SizeOf(responseBuffer[0]) * responseBuffer.Length; IntPtr pointer = Marshal.AllocHGlobal(responseSize); try { // Copy the array to unmanaged memory. Marshal.Copy(responseBuffer, 0, pointer, responseBuffer.Length); return ResourceResponse.Create((uint)responseBuffer.Length, pointer, "text/css"); } finally { // Data is not owned by the ResourceResponse. A copy is made // of the supplied buffer. We can safely free the unmanaged memory. Marshal.FreeHGlobal(pointer); stream.Close(); } } return null; } public bool OnFilterNavigation(NavigationRequest request) { return false; } }