2012-03-14 3 views
4

나는 FillForm 방법을 사용하여 html 양식을 채우기 위해 TEmbeddedWebBrowser을 사용합니다. 하지만 내 HTML 양식을 완전히 자바 스크립트 기반의 편집기가 포함되어 있으며 채우는 방법을 모르겠습니다.자바 스크립트 편집기를 어떻게 작성합니까?

이런 식으로 뭔가 :

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'을 채우려고했지만이 오류가 있습니다 : Member not found. 'iframe'에는 이러한 속성이없는 것 같습니다. – Kermia

+0

그리고'IHTMLElement' 클래스는'execCommand' 메소드를 가지고 있지 않습니다. – Kermia

답변

4

편집기 자체가 DIV 또는 contentEditable/designMode = onIFRAME 세트 (다른 ​​HTML 요소가 될 수있다).
요소가 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으로 테스트하지 않았지만 HTML/JavascriptIE에 입력했을 때 가짜 결과를 얻었을 수도 있습니다. range.execCommand('inserthtml', false, MyText)을 시도해보십시오.
1

나는이 TEmbeddedWebBrowser 도구와 관련된 경험이 없지만, 게시물에 따라 내가 검색 할 수있는 방법을 생각하고 있어요 폼의 필드. 일단 어떤 필드가 들어 있는지 알게되면, 게시물의 목적이 아닌 것처럼 채울 수 있습니다.

  1. 가 선언 된 형태이고 그것을 연결할 가정 : 당신은 .elements 수집을 구문 분석 형태를 잡아 수 있습니다 :이 페이지 에 선언있어 쉽게 경우 (그에게 id 속성을주고, 다음 document.getElementById() 사용) , /inside editor.js으로 양식을 선언하면 document.forms을 사용하여 여전히 양식을 작성할 수 있습니다.

  2. 그렇지 않으면 : 당신은 인터넷에서 덤프 스크립트를 얻을 수 있습니다 - this one처럼 - 당신이 호출 할 때 dump(data) 또는 dump(data[body]) (editor.js 자연스럽게 포함 후) 인쇄 기능을 참조하십시오. data[]onclick에 의해 호출되는 rtevalue()에 대한 인수로 사용되는 이므로 양식의 키/값 쌍을 포함해야합니다. 이 메소드의 나쁜 점은 data[]은 이어야하며, 라디오 버튼이 있거나 체크 박스가있는 경우에는 선택된 것만 볼 수 있습니다. 따라서이 트릭을 시도하기 전에 첫 번째 옵션에서 샷을 줄 것입니다. . 그것이 작동하지 않는 시간 (양식이 참여하고 특히)의 대부분은 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 삽입 문제"를 봤는데, 다른 관련 결과 중에서 -이 흥미로운 기사를 찾았습니다 : http://domscripting.com/blog/display/99 둘째, http : //에서 W3School을 인용하면//www.w3schools.com/htmldom/dom_methods.asp "innerHTML은 W3C DOM 사양의 일부가 아닙니다."즉, HTML 트리 (appendChild ...)를 변경하기위한 다른 명쾌한 방법이 있습니다. –

+0

정보 주셔서 감사합니다 . – kobik