4

我使用方法TEmbeddedWebBrowser来填写 html 表单FillForm。但是我的 html 表单包含一个完全基于 javascript 的编辑器,我不知道如何填写。

像这样的东西:

your comment :
<script type='text/javascript' src='public/scripts/src/editor.js?1'></script>

和提交按钮:

<input type="submit" name="btnSubmit" id="btnSubmit" value="Send" class="btn" onclick="rtevalue(&quot;data[body]&quot;,437934);" />
4

2 回答 2

4

编辑器本身是一个DIV(可能是其他 HTML 元素)或IFRAME设置为contentEditable / designMode= on
如果元素是 aDIV你可以使用它的InnerHTML属性。
为了获得最佳结果,请IFRAME使用以下代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  editorDoc: OleVariant;
  range: OleVariant;
  id: OleVariant;
begin
  id := 'editor'; // frame ID
  editorDoc := (WebBrowser1.Document as IHTMLDocument2).parentWindow.frames.item(id).Document;
  range := editorDoc.body.createTextRange();
  // range.collapse(false); // if you need to append
  range.select();
  range.pasteHTML('<b>Boo!</b>');
end;

笔记:

  • 没有错误检查以简化代码。
  • 您也可以尝试range.execCommand('inserthtml', false, MyText)(未使用 进行测试TEmbeddedWebBrowser,但当我使用 plain HTML/ Javascripton尝试时得到了虚假的结果IE)。
于 2012-03-15T15:42:55.487 回答
1

我没有关于这个 TEmbeddedWebBrowser 工具的经验,但根据你的帖子,我正在考虑一种检索表单字段的方法。一旦您知道它包含哪些字段,我想您可以填写它们,因为这似乎不是您帖子的目的。

  1. 假设声明了一个表单并且它是可访问的:您可以获取表单并解析它的.elements集合:如果它在您的页面中声明(给它一个id属性,然后使用 a document.getElementById())很容易,如果表单由声明它可能仍然可行/inside editor.jsdocument.forms然后使用。

  2. 否则:您可以从网上获得一个转储脚本 - 就像这个- 并查看当您调用(editor.js 自然包含之后)dump(data)dump(data[body]). 作为提交按钮调用 data[]的参数,它应该包含表单的键/值对。这种方法的缺点是必须由 Javascript 填充,因此如果您的表单有单选按钮或复选框,您可能只会看到选定的选项,这就是为什么我会在尝试这个技巧之前先尝试第一个选项。rtevalue()onclickdata[]

关于注释,您不应该直接使用innerHTML将 HTML 子树插入文档,因为大多数情况下它不起作用(尤其是涉及表单时),appendChild()重做工作以确保文档正确,如下所示:

var dummyContainer=document.createElement("span");
var dummyContainer.innerHTML="..."; //insert stuff here, because it's easy to use ;)
myContainer.innerHTML=""; //clearing your "real" container doesn't add anything to the HTML tree, it'll work - you can also use removeChild() in a loop (but it's not as easy to use!)
myContainer.appendChild(dummyContainer); //appendChild will translate properly the text inserted by innerHTML in dummyContainer into a clean HTML subtree
于 2012-03-15T08:52:49.540 回答