使用 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'");
    };
}