我可以像这样在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:但是,由于
textarea
没有值,所以我无法执行类似的代码行来编辑textarea
中的文本。
假设是错误的,设置value
属性对于teaxtarea
可以正常工作。
[您应该确保包括iframe在内的文档已加载,并使用正确的名称选择了正确的iframe,然后使用正确的id选择了正确的textarea。
示例
这里是一个最小的完整可验证示例,它显示了如何找到iframe
并在textarea
内设置iframe
的值。
为了使示例独立于外部资源并简化验证,我没有使用脚本的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'");
};
}