2012-03-14 6 views
4

FillFormメソッドを使用してhtmlフォームを入力するのにTEmbeddedWebBrowserを使用します。しかし、私のHTMLフォームには、完全にjavascriptベースのエディターが含まれており、その記入方法はわかりません。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(&quot;data[body]&quot;,437934);" /> 
+0

ありがとうございます、この例では 'SetFieldValue'メソッドを使用しています。しかし、問題は、フォームにフィールドがないということです。エディタはjsベースです。どのように私はそのフィールドを見つけることができますか? – Kermia

+0

'innerHtml'と' innerText'プロパティを使って 'iframe'を埋めようとしましたが、私はこのエラーを受け取りました:メンバーが見つかりません。 'iframe'にはこれらのプロパティがないようです。 – Kermia

+0

'IHTMLElement'クラスには' execCommand'メソッドがありません。 – Kermia

答えて

4

エディタ自体は= oncontentEditable/designModeからDIV(他のHTML要素であってもよい)またはIFRAMEセットです。
要素がDIVの場合は、InnerHTMLプロパティを使用できます。

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; 

注:コードを簡単にするためにチェック

  • エラーなしIFRAMEで最良の結果を得るために
    は、以下のコードを使用します。
  • また、(TEmbeddedWebBrowserでテストが、私はIEHTML/Javascript無地でそれをしようとしたときに偽の結果を持っていません)range.execCommand('inserthtml', false, MyText)を試してみてください。
1

私はこのTEmbeddedWebBrowserツールに関する経験がないが、あなたのポストによると、私が取得する方法を考えていますフォームのフィールド。それがどのフィールドに含まれているかを知ったら、あなたの投稿の目的ではないように、あなたはそれらを記入できると思います。

  1. が宣言した形であり、それが到達可能であると仮定すると:あなたはその.elementsコレクションを解析 フォームをつかむことができます:それはあなたのページ で宣言されています簡単場合(それをid属性を与え、その後、document.getElementById()を使用します) 、 フォームが/ editor.jsの内部で宣言されている場合は、document.formsを使用してもまだ実行可能です。

  2. そうでない場合:あなたはネットからダンプ スクリプトを取得することができます - this oneのように - とお電話の際はdump(data)またはdump(data[body])editor.js自然 含む後)に印刷されるかを参照してください。 data[]は、 onclickと呼ばれるrtevalue()の引数として使用される であるため、フォームのキーと値のペアが含まれている必要があります。このメソッドの悪い点は、data[]は にJavascriptで埋めなければならないということです。フォームにラジオボタンまたは チェックボックスがある場合は、選択したものだけが表示されることがあります。このトリックを試す前に最初のオプションでショットします。それは動作しません回(フォームが関与している場合は特に)、のほとんどがappendChild()を持っているとして、あなたは直接文書にHTMLサブツリーを挿入するためにinnerHTMLを使うべきではありませんコメントについて

は、に作業をやり直します正しい文書を保証する、このような:

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 
+0

'innerHTML'がHTMLサブツリーを挿入できないときに、例/参照を教えてもらえますか? 'myContainer.innerHTML =" 何でも問題がありますか? "'? – kobik

+0

@kobik私は自分自身の経験から(数年前、私は縮小を使って私にそれについて教えてもらいました)、なぜその愚かなinnerHTMLがその仕事をしなかったのか理解しようと時間を無駄にしたことを知っています。まず、あなたの質問に答えるために、私は "innerHTML insert issue"を探して、他の関連する結果の中から見つけました:この興味深い記事:http://domscripting.com/blog/display/99第2に、http: /www.w3schools.com/htmldom/dom_methods.asp "innerHTMLはW3C DOM仕様の一部ではありません。"つまり、HTMLツリー(appendChild ...)を変更するための他の仕様に準拠した方法があります。 –

+0

感謝の気持ち。 – kobik

関連する問題