我使用TEmbeddedWebBrowser
使用FillForm
方法填充html表单。但我的html表单包含一个完全基于javascript的编辑器,我不知道如何填写它。
这样的事情:
your comment :
<script type='text/javascript' src='public/scripts/src/editor.js?1'></script>
提交btton:
<input type="submit" name="btnSubmit" id="btnSubmit" value="Send" class="btn" onclick="rtevalue("data[body]",437934);" />
答案 0 :(得分:4)
编辑器本身是DIV
(可能是其他HTML元素)或IFRAME
设置为contentEditable / designMode
= on
。
如果元素是DIV
,您可以使用它的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
进行测试,但是当我在HTML
上使用普通Javascript
/ IE
进行测试时出现了虚假结果答案 1 :(得分:1)
我没有关于这个TEmbeddedWebBrowser工具的经验,但根据你的帖子,我正在考虑一种检索表单字段的方法。一旦你知道它包含哪些字段,我想你可以填写它们,因为它似乎不是你帖子的目的。
假设有一个声明的表单并且可以访问:您可以获取表单和
解析其.elements
集合:如果在您的页面中声明它,则很容易
(给它一个id
属性,然后使用document.getElementById()
),
如果表单由/ inside声明,它仍然可行
editor.js
,然后使用document.forms
。
否则:您可以获得转储
来自网络的脚本 - 如this one -
并查看通话时打印的内容(包括editor.js
后)
自然地dump(data)
或dump(data[body])
。正如data[]
那样
用作提交按钮调用的rtevalue()
的参数
onclick
,它应包含表单的键/值对。这种方法的坏处是data[]
必须
由Javascript填充,所以如果你的表单有单选按钮或
复选框你可能只看到所选的那些,这就是为什么我会在尝试这个技巧之前尝试第一个选项。
关于评论,您不应直接使用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