CefSharp 和跨域
Posted
技术标签:
【中文标题】CefSharp 和跨域【英文标题】:CefSharp and Crossdomain 【发布时间】: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 操作时返回的所有请求中.
我没有想法。
【问题讨论】:
【参考方案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 设置为 true 和 UniversalAccessFromFileUrlsAllowed。
【讨论】:
你的答案可能是正确的。但是,需要注意一个非常重要的注意事项:跨应用程序域与网络意义上的跨域不同。它们是两个非常非常不同的东西。 AppDomains 是一个复杂的概念,可用于将 .NET 应用程序划分为“可卸载”的独立部分。因此它们的名称相似,但功能却大不相同。【参考方案2】:此代码适用于 CEF:r3.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;
此代码使您的计算机容易受到恶意攻击。
【讨论】:
以上是关于CefSharp 和跨域的主要内容,如果未能解决你的问题,请参考以下文章