【问题标题】:CefSharp and CrossdomainCefSharp 和跨域
【发布时间】:2013-07-30 08:25:03
【问题描述】:

我正在尝试在 .NET 4.0 应用程序中使用 CefSharp web browser。 我从本地存储的 html 和 js 内容加载页面。因此网络浏览器使用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;
    }
}

我在我的表单代码中使用它:

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

它不会改变任何东西。

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

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

我没有想法。

【问题讨论】:

    标签: c# xmlhttprequest cross-domain chromium-embedded cefsharp


    【解决方案1】:

    我找到了解决方案,如果有人需要帮助,这里就是:

      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

    【讨论】:

    • 你的答案可能是正确的。但是,需要注意一个非常重要的注意事项:跨应用程序域与网络意义上的跨域不同。它们是两个非常非常不同的东西。 AppDomains 是一个复杂的概念,可用于将 .NET 应用程序划分为“可卸载”的独立部分。因此它们的名称相似,但功能却大不相同。
    【解决方案2】:

    此代码适用于 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;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 2012-01-15
      • 1970-01-01
      • 2013-01-04
      • 2013-05-14
      • 2012-01-27
      • 2013-10-21
      相关资源
      最近更新 更多