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 / designModeon
DIVInnerHTML
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)( でテストされていませんが、 plain / onTEmbeddedWebBrowserで試したときに偽の結果が得られました)。HTMLJavascriptIE
于 2012-03-15T15:42:55.487 に答える
1

この TEmbeddedWebBrowser ツールに関する経験はありませんが、投稿によると、フォームのフィールドを取得する方法を考えています。含まれているフィールドがわかったら、投稿の目的ではないように見えるので、それらを入力できると思います。

  1. 宣言されたフォームがあり、到達可能であると仮定すると、フォームを取得してその.elementsコレクションを解析できます。ページで宣言されている場合 (id属性を指定してから a を使用document.getElementById()) は簡単です。 /inside editor.js、その後を使用しdocument.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 に答える