使用 javascript 从 CefSharp 浏览器获取文本框值

jar*_*uan 1 javascript c# winforms chromium-embedded cefsharp

我有一个 winforms 应用程序,它有一个 ChromiumWebBrowser 控件和一些基本的 Windows 控件。我希望能够单击一个按钮,调用 javascript 以获取浏览器中文本框的值,并将返回的值复制到 winforms 应用程序中的文本框。这是我的代码:

string script = "(function() {return document.getElementById('Email');})();";

string returnValue = "";

var task = browser.EvaluateScriptAsync(script, new { });

await task.ContinueWith(t =>
    {
        if (!t.IsFaulted)
        {
            var response = t.Result;
            if (response.Success && response.Result != null)
            {
                returnValue = (string)response.Result;
            }
        }
    });

txtTarget.Text = returnValue;
Run Code Online (Sandbox Code Playgroud)

然而,返回的结果只是“{}”。我已经在 Chrome 中加载了相同的网页并在开发工具中执行了相同的 javascript,我得到了预期的文本框值。

我查看的演示有示例代码,只是“返回 1+1;”,当我尝试返回值“2”而不是“{}”时。有趣的是,当我尝试

string script = "(function() {return 'hello';})()";
Run Code Online (Sandbox Code Playgroud)

我仍然收到“{}”,几乎好像这不适用于字符串。

我一直在挠头一段时间,一直无法弄清楚如何解决这个问题。我是在犯一个非常基本的语法错误还是有更复杂的事情发生?

jar*_*uan 5

所以我想我已经弄清楚了:

string script = "(function() {return document.getElementById('Email').value;})();";
string returnValue = "";

var task = browser.EvaluateScriptAsync(script);

await task.ContinueWith(t =>
{
    if (!t.IsFaulted)
    {
        var response = t.Result;

        if (response.Success && response.Result != null)
        {
            returnValue = response.Result.ToString();
        }
    }
});  

txtTarget.Text = returnValue;
Run Code Online (Sandbox Code Playgroud)

从 EvaluateScriptAsync 中删除 args 对象似乎解决了这个问题。不确定问题是什么 - 也许它试图在不应该采用任何参数时使用空的 args 对象运行 javascript 函数?

不管怎样,现在已经解决了。