I'm trying to use the CefSharp web browser inside a .NET 4.0 application.
I load pages from html and js content stored localy. So the web browser opens the pages with the file://
protocol.
The page transitions are made with jQuery (ajax) and I get a XMLHttpRequest cannot load file:///XXXXXXXX/Debug/res/www/shared/js/src/views/homeView.html. Cross origin requests are only supported for HTTP.
I tried using a Schemehandler and override the ProcessRequest function to handle page loads inside the file://
domain.
class SchemeHandlerFactory : ISchemeHandlerFactory
{
public ISchemeHandler Create()
{
return new SchemeHandler();
}
}
class SchemeHandler : ISchemeHandler
{
public SchemeHandler()
{
}
public bool ProcessRequest(IRequest request, ref string mimeType, ref Stream stream)
{
var uri = new Uri(request.Url);
var segments = uri.Segments;
var file = segments[segments.Length - 1];
var bytes = File.ReadAllBytes(request.Url.Replace("file:///",""));
stream = new MemoryStream(bytes);
mimeType = "text/html";
return true;
}
}
And I use it in my form code by adding :
CEF.RegisterScheme("file", new SchemeHandlerFactory());
it doesn't change anything.
I checked the commit logs on the CefSharp repo and it says that the Cross AppDomain is now supported but how do I use it ? https://github.com/cefsharp/CefSharp/pull/35
I also thought on recompiling CefSharp to add the Access-Control-Allow-Origin to all the requests returned by the web browser when it executes GET operation on local files.
I'm out of ideas.
I found the solution, here it is if someone needs help with this :
BrowserSettings browserSettings = new BrowserSettings();
browserSettings.FileAccessFromFileUrlsAllowed = true;
browserSettings.UniversalAccessFromFileUrlsAllowed = true;
browserSettings.TextAreaResizeDisabled = true;
string urlToNavigate =
Application.StartupPath + @"\res\www\shared\index.html";
web_view = new WebView(urlToNavigate, browserSettings);
We need to put the FileAccessFromFileUrlsAllowed to true and UniversalAccessFromFileUrlsAllowed.