5

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

页面转换是用 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;
    }
}

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

CEF.RegisterScheme("file", new SchemeHandlerFactory());

它不会改变任何东西。

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

我还考虑重新编译 CefSharp 以将 Access-Control-Allow-Origin添加到 Web 浏览器在对本地文件执行GET操作时返回的所有请求中。

我没主意了。

4

2 回答 2

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

我们需要将FileAccessFromFileUrlsAllowed设置为trueUniversalAccessFromFileUrlsAllowed

于 2013-08-02T09:38:19.750 回答
1

此代码适用于CEFr3.2987.1601 (Windows 窗体)

browser = new ChromiumWebBrowser("www.websites.com")
            {
                Dock = DockStyle.Fill,
            };
toolStripContainer.ContentPanel.Controls.Add(browser);

//browser.BrowserSettings.WebSecurity = CefState.Disabled;
browser.BrowserSettings.FileAccessFromFileUrls = CefState.Enabled;
browser.BrowserSettings.UniversalAccessFromFileUrls = CefState.Enabled;

https://github.com/cefsharp/CefSharp/issues/1397

要非常小心

//browser.BrowserSettings.WebSecurity = CefState.Disabled;

此代码使您的计算机容易受到恶意攻击。

于 2017-08-11T18:51:18.770 回答