CefSharp和Crossdomain

Hx7*_*x71 4 c# xmlhttprequest cross-domain chromium-embedded cefsharp

我正在尝试在.NET 4.0应用程序中使用CefSharp Web浏览器.我从html和js内容加载页面存储localy.因此,Web浏览器会打开包含file://协议的页面.

页面转换是使用jQuery(ajax)进行的,我得到了一个 XMLHttpRequest cannot load file:///XXXXXXXX/Debug/res/www/shared/js/src/views/homeView.html. Cross origin requests are only supported for HTTP.

我尝试使用Schemehandler并覆盖ProcessRequest函数来处理file://域内的页面加载.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在表单代码中使用它添加:

CEF.RegisterScheme("file", new SchemeHandlerFactory());
Run Code Online (Sandbox Code Playgroud)

它没有改变任何东西.

我检查了CefSharp repo上的提交日志,它说现在支持Cross AppDomain但我该如何使用它?https://github.com/cefsharp/CefSharp/pull/35

我还想重新编译CefSharp,将 Access-Control-Allow-Origin添加到Web浏览器在本地文件上执行GET操作时返回的所有请求.

我没有想法.

Hx7*_*x71 8

我找到了解决方案,这是因为有人需要帮助:

  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);
Run Code Online (Sandbox Code Playgroud)

我们需要将FileAccessFromFileUrlsAllowed设置true,并将UniversalAccessFromFileUrlsAllowed设置为.

  • 你的答案可能是正确的.但是,有一个非常重要的注意事项:*跨域AppDomains与Web意义上的跨域*不同.它们是两个非常非常不同的东西.AppDomains是一个复杂的概念,可用于将.NET应用程序划分为"可卸载"的独立部分.所以他们有相似的名字,但功能却截然不同. (4认同)