我正在尝试在.NET 4.0应用程序中使用CefSharp web browser。
我从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;
}
}
我在表单代码中使用它添加:
CEF.RegisterScheme("file", new SchemeHandlerFactory());
它不会改变任何东西。
我检查了CefSharp repo上的提交日志,它说现在支持Cross AppDomain但我该如何使用它? https://github.com/cefsharp/CefSharp/pull/35
我还考虑重新编译CefSharp,将 Access-Control-Allow-Origin 添加到Web浏览器在本地文件上执行 GET 操作时返回的所有请求
我没有想法。
答案 0 :(得分: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 置于 true 和 UniversalAccessFromFileUrlsAllowed 。
答案 1 :(得分:1)
此代码适用于 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;
此代码使您的计算机容易受到恶意攻击。