【问题标题】:Is there any documentation for the WebView2 DevToolsProtocolHelperWebView2 DevToolsProtocolHelper 是否有任何文档
【发布时间】:2021-09-03 09:35:52
【问题描述】:

有人看过有关 WebView2 DevToolsProtocolHelper 的任何文档吗? 在我问的另一个问题 (How do I programmatically add a file to a fileupload control from a windows form to a webpage) 中,有人建议我下载并使用 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 ") 代码行。同样,仍然没有将文件上传到页面。

再次感谢任何帮助

【问题讨论】:

    标签: c# winforms webview2 chrome-devtools-protocol


    【解决方案1】:

    GetDevToolsProtocolHelper 文档是Using Chromium DevTools Protocol in WebView2 上的“操作方法”文章。

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

    【讨论】:

    • 感谢您的帮助。我已经取得了进展,但仍然没有让文件上传。查看已编辑问题中的代码更改。
    猜你喜欢
    • 1970-01-01
    • 2013-03-09
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多