使用 CEFSharp 编辑 <textarea>
Using CEFSharp to edit <textarea>
我可以像这样在 CefSharp 的 iFrame 中编辑常规文本框:
Browser1.GetBrowser().GetFrame("iFrame1").ExecuteJavaScriptAsync("document.getElementById('ElementID').value=" + '\'' + "1234" + '\'');
但是,因为文本区域没有值:
<iframe id="iFrame1" name="iFrame1">
<textarea name="txtareaname" id="txtareaname1">sometexthere</textarea>
</iframe>
我无法执行类似的代码行来编辑文本区域中的文本:
textarea.Browser1.GetBrowser().GetFrame("iFrame1").ExecuteJavaScriptAsync("document.getElementById('txtareaname1').value=" + '\'' + "1234" + '\'');
我也试过:
textarea.Browser1.GetBrowser().GetFrame("iFrame1").ExecuteJavaScriptAsync("document.getElementById('txtareaname1').innertext=" + '\'' + "1234" + '\'');
如何调整我的代码以编辑此文本区域?
OP: However, because a textarea
doesn't have a value I am unable to
execute a similar line of code to edit the text in the textarea
.
假设错误,设置 value
属性对 teaxtarea
有效。
您应该确保文档(包括 iframe)已加载,并且您使用正确的名称选择了正确的 iframe,然后您使用正确的 ID 选择了正确的文本区域。
例子
这是一个最小的完整可验证示例,它显示了如何找到 iframe
并在 iframe
中设置 textarea
的值。
为了使示例独立于外部来源并使验证更容易,我没有使用其 src
属性初始化 iframe,而是使用脚本初始化了 iframe
。
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
var content = new HtmlString(@"
<!DOCTYPE html>
<html>
<body>
<iframe id=""iFrame1"" name=""iFrame1"" src=""about:blank""></iframe>
<script>
var doc = document.getElementById('iFrame1').contentWindow.document;
doc.open();
doc.write('<html><head><title></title></head><body>' +
'Address:<br>' +
'<textarea id=""myTextarea"">342 Alvin RoadDucksburg</textarea>' +
'</body></html>');
doc.close();
</script>
</body>
</html>
");
var browser = new ChromiumWebBrowser(content)
{ Dock = DockStyle.None, Size = new Size(400, 200), Location = new Point(8, 42) };
Controls.Add(browser);
var button = new Button() { Text = "Click Me", Location = new Point(8, 8) };
Controls.Add(button);
button.Click += (obj, args) => {
browser.GetBrowser().GetFrame("iFrame1")
.ExecuteJavaScriptAsync("document.getElementById('myTextarea').value=" +
"'Fifth Avenue, New York City'");
};
}
我可以像这样在 CefSharp 的 iFrame 中编辑常规文本框:
Browser1.GetBrowser().GetFrame("iFrame1").ExecuteJavaScriptAsync("document.getElementById('ElementID').value=" + '\'' + "1234" + '\'');
但是,因为文本区域没有值:
<iframe id="iFrame1" name="iFrame1">
<textarea name="txtareaname" id="txtareaname1">sometexthere</textarea>
</iframe>
我无法执行类似的代码行来编辑文本区域中的文本:
textarea.Browser1.GetBrowser().GetFrame("iFrame1").ExecuteJavaScriptAsync("document.getElementById('txtareaname1').value=" + '\'' + "1234" + '\'');
我也试过:
textarea.Browser1.GetBrowser().GetFrame("iFrame1").ExecuteJavaScriptAsync("document.getElementById('txtareaname1').innertext=" + '\'' + "1234" + '\'');
如何调整我的代码以编辑此文本区域?
OP: However, because a
textarea
doesn't have a value I am unable to execute a similar line of code to edit the text in thetextarea
.
假设错误,设置 value
属性对 teaxtarea
有效。
您应该确保文档(包括 iframe)已加载,并且您使用正确的名称选择了正确的 iframe,然后您使用正确的 ID 选择了正确的文本区域。
例子
这是一个最小的完整可验证示例,它显示了如何找到 iframe
并在 iframe
中设置 textarea
的值。
为了使示例独立于外部来源并使验证更容易,我没有使用其 src
属性初始化 iframe,而是使用脚本初始化了 iframe
。
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
var content = new HtmlString(@"
<!DOCTYPE html>
<html>
<body>
<iframe id=""iFrame1"" name=""iFrame1"" src=""about:blank""></iframe>
<script>
var doc = document.getElementById('iFrame1').contentWindow.document;
doc.open();
doc.write('<html><head><title></title></head><body>' +
'Address:<br>' +
'<textarea id=""myTextarea"">342 Alvin RoadDucksburg</textarea>' +
'</body></html>');
doc.close();
</script>
</body>
</html>
");
var browser = new ChromiumWebBrowser(content)
{ Dock = DockStyle.None, Size = new Size(400, 200), Location = new Point(8, 42) };
Controls.Add(browser);
var button = new Button() { Text = "Click Me", Location = new Point(8, 8) };
Controls.Add(button);
button.Click += (obj, args) => {
browser.GetBrowser().GetFrame("iFrame1")
.ExecuteJavaScriptAsync("document.getElementById('myTextarea').value=" +
"'Fifth Avenue, New York City'");
};
}