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)
我仍然收到“{}”,几乎好像这不适用于字符串。
我一直在挠头一段时间,一直无法弄清楚如何解决这个问题。我是在犯一个非常基本的语法错误还是有更复杂的事情发生?
所以我想我已经弄清楚了:
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 函数?
不管怎样,现在已经解决了。
| 归档时间: |
|
| 查看次数: |
6828 次 |
| 最近记录: |