使用 CefSharp 上传文件
本文关键字:文件 CefSharp 使用 | 更新日期: 2023-09-27 18:35:03
我们在C# WinForms应用程序中使用CefSharp(v37.0.0 NuGet包(。我们正在寻找一种(以编程方式(触发文件上传操作的方法。如果有的话,如何做到这一点?还有一些额外的想法:
- 我们在页面上有一个文件上传对话框,通常用户会在其中选择一个文件。这工作正常,我们通过 IDialogHandler 拦截对话框调用并提供文件。
- 现在我们要触发相同的对话框并预设文件。当对话框从"ExecuteScriptAsync"调用成功打开时,我们无法预先选择该文件。可能是由于以下原因:如何使用文件路径 html5 创建/初始化文件对象
- 我们的下一个想法是让对话框正常打开并以编程方式发出 click 事件,以便浏览器打开文件对话框(然后我们将通过 IDialogHandler 捕获并提供我们想要的文件(。
- 尝试这种方法,我们的观察如下:
- 在用户操作(例如,在浏览器中单击按钮(之后,我们可以以编程方式"单击"文件输入按钮。
- 从通过 ExecuteScriptAsync 发起的调用中执行相同的操作,对话框(或 IDialogHandler 中的调用(不会出现。
CefSharp 示例项目上的文件TempFileDialogHandler
有一个示例。
public class TempFileDialogHandler : IDialogHandler
{
public bool OnFileDialog(IWebBrowser browserControl, IBrowser browser, CefFileDialogMode mode, string title, string defaultFilePath, List<string> acceptFilters, int selectedAcceptFilter, IFileDialogCallback callback)
{
callback.Continue(selectedAcceptFilter, new List<string> { Path.GetRandomFileName() });
return true;
}
}
替换文件路径的Path.GetRandomFileName()
,然后将处理程序附加到浏览器,如下所示:
browser.DialogHandler = new TempFileDialogHandler();
从通过 ExecuteScriptAsync 发起的调用中执行相同的操作,对话框(或 IDialogHandler 中的调用(不会出现。
这可能是由于适用于普通 JavaScript 的相同安全限制:Chrome 中以编程方式打开上传文件对话框
我认为您需要:
- 在 JavaScript 中:
- 将文件上传按钮滚动到视图中,
Element.scrollIntoView()
- 计算文件上传按钮的坐标,
Element.getBoundingClientRect()
- 将坐标返回到 C#。
- 将文件上传按钮滚动到视图中,
- 在 C# 中:
- 以编程方式向坐标发送鼠标单击(请参阅此问题(
我可能是错的,但这也可以通过使用jquery文件上传器插件来实现,而不是自己做。
阿贾克斯上传上传