0

有没有人看过有关 WebView2 DevToolsProtocolHelper 的任何文档?在我问的另一个问题中(如何以编程方式将文件添加到从 Windows 窗体到网页的文件上传控件),建议我下载并使用 Microsoft.Web.WebView2.DevToolsProtocolExtensions。起初,它似乎使用起来非常简单,但不是那么多。

使用 c# 和 webview2 赢得表单应用程序

DevToolsProtocolHelper helper = webView21.CoreWebView2.GetDevToolsProtocolHelper()
Task<DOM.Node> t = helper.DOM.GetDocumentAsync();

 Task<int> querySelectorResponse = helper.DOM.QuerySelectorAsync(t.Result.NodeId, "#fileupload");
_ = helper.DOM.SetFileInputFilesAsync(new string[] { filename }, querySelectorResponse.Result);

这 4 行代码应该获取文档并搜索节点 fileupload。我得到的只是错误,我还没有看到任何真实的例子或文档。

任何帮助将不胜感激。

**** 更新 *****

        DevToolsProtocolHelper helper =  webView21.CoreWebView2.GetDevToolsProtocolHelper();
        DOM dom = helper.DOM;
        DOM.Node t = await dom.GetDocumentAsync(-1,true);
        int querySelectorResponse = await dom.QuerySelectorAsync(t.NodeId, "#fileupload");
        _ = helper.DOM.SetFileInputFilesAsync(new string[] { filename }, t.NodeId);

这是我的代码的最新版本,看来我已经取得了进展。当我使用 CEFSHARP 时,我从 Document 和#fileUpload 返回的 ID 总是相同的,并且它在上传文件时起作用。

使用上面的代码,我得到了 ID,但它们总是不同的,我没有上传文件。

另一个更新,当我第二次运行此代码(通过按钮单击 winform)时,我确实获得了 int querySelectorResponse = await dom.QuerySelectorAsync(t.NodeId, "#fileupload") 行的正确 ID (504)的代码。同样,仍然没有将文件上传到页面。

再次,任何帮助将不胜感激

4

1 回答 1

0

GetDevToolsProtocolHelper 文档是有关在 WebView2 中使用 Chromium DevTools 协议的“如何”文章。

另外,您不能将 Task.Result 与我在上面的代码中看到的 WebView2 任务一起使用。WebView2 只能在其创建的 UI 线程中使用,并且需要该 UI 线程来传达任务完成情况。您应该可以改用 await 。

于 2021-06-18T17:03:02.637 回答