如何允许网站访问 CEFSharp WPF 中的本地文件系统?
How Can I Allow Website to Access Local File System in CEFSharp WPF?
我正在编写一个带有集成 CEFSharp web 浏览器控件的 wpf 应用程序,但我在网站上遇到了障碍。该网站需要访问本地文件系统,但我不确定如何或在何处在后端捕获它并授予访问权限。我已经实现了 IRequestHandler 和 IResourceRequestHandler,但我不确定还能做什么。
这是来自网站的错误:
不知何故,Chrome 捕获并处理它:
我想以类似的方式处理它。感谢任何帮助。
如果我在 Chrome 浏览器上正确读取 documentation,Chromium 似乎会自动调用 chrome.fileSystem.requestFileSystem(object options, function callback)
。
我想如果你想手动处理这个,你需要提示用户这个 permission/action,意思是从 CEFSharp 的 Chromium 客户端内部做同样的 API 调用。
谢谢@amaitland 和@Jimenemex 的回复。他们确实让我朝着正确的方向前进。最后,我需要在 IRequestHandler 的“OnQuotaRequest”事件中捕获文件系统请求。以下代码解决了我的问题:
public bool OnQuotaRequest(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, long newSize,
IRequestCallback callback)
{
string askingURL = Helper.GetWebsiteName(originUrl);
var infoWindow = new InformationWindow("", "Allow " + askingURL, "to store files on this device?");
infoWindow.OkButton.Visibility = Visibility.Hidden;
infoWindow.YesButton.Visibility = Visibility.Visible;
infoWindow.NoButton.Visibility = Visibility.Visible;
infoWindow.Topmost = true;
if (infoWindow.ShowDialog() == true)
{
callback.Continue(true);
return true;
}
return false;
}
我正在编写一个带有集成 CEFSharp web 浏览器控件的 wpf 应用程序,但我在网站上遇到了障碍。该网站需要访问本地文件系统,但我不确定如何或在何处在后端捕获它并授予访问权限。我已经实现了 IRequestHandler 和 IResourceRequestHandler,但我不确定还能做什么。
这是来自网站的错误:
不知何故,Chrome 捕获并处理它:
我想以类似的方式处理它。感谢任何帮助。
如果我在 Chrome 浏览器上正确读取 documentation,Chromium 似乎会自动调用 chrome.fileSystem.requestFileSystem(object options, function callback)
。
我想如果你想手动处理这个,你需要提示用户这个 permission/action,意思是从 CEFSharp 的 Chromium 客户端内部做同样的 API 调用。
谢谢@amaitland 和@Jimenemex 的回复。他们确实让我朝着正确的方向前进。最后,我需要在 IRequestHandler 的“OnQuotaRequest”事件中捕获文件系统请求。以下代码解决了我的问题:
public bool OnQuotaRequest(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, long newSize,
IRequestCallback callback)
{
string askingURL = Helper.GetWebsiteName(originUrl);
var infoWindow = new InformationWindow("", "Allow " + askingURL, "to store files on this device?");
infoWindow.OkButton.Visibility = Visibility.Hidden;
infoWindow.YesButton.Visibility = Visibility.Visible;
infoWindow.NoButton.Visibility = Visibility.Visible;
infoWindow.Topmost = true;
if (infoWindow.ShowDialog() == true)
{
callback.Continue(true);
return true;
}
return false;
}