Как мне заполнить редактор JavaScript? - PullRequest
4 голосов
/ 14 марта 2012

Я использую 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);" />

Ответы [ 2 ]

4 голосов
/ 15 марта 2012

Сам редактор - это 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 голос
/ 15 марта 2012

У меня нет опыта работы с этим инструментом TEmbeddedWebBrowser, но, согласно вашему сообщению, я думаю о способе получения полей формы.Как только вы узнаете, какие поля в нем содержатся, я полагаю, вы можете заполнить их, поскольку это не является целью вашего сообщения.

  1. Предполагается, что форма объявлена ​​и она достижима: вы можете захватить форму и проанализировать ее коллекцию .elements: легко, если она объявлена ​​на вашей странице (присвойте ей атрибут id, а затем используйте document.getElementById()), она все еще может быть выполнима, если форма объявлена ​​с помощью /внутри editor.js, используя document.forms затем.

  2. В противном случае: вы можете получить сценарий дампа из сети - например, этот - и посмотреть, что напечатанокогда вы звоните (после включения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...