Форум: "Прочее";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];
ВнизTWebBrowser и события элементов формы Найти похожие ветки
← →
stas © (2010-07-19 10:13) [0]Есть html форма, на которой находится элемент комбобокс. Пытаюсь его заполнить с помощью TWebbrowser, все получается, но у этому комбобоксу присвоено событие onchange и обработчик JavaScript.
И это событие не срабатывает, подскажите пожалуйста как заставить его выполниться?
делаю так:...
field := theForm.Item(fieldName,instance) as IHTMLElement;
...
selectField := field as IHTMLSelectElement;
...
selectField.selectedIndex:=i;
← →
И. Павел © (2010-07-19 13:54) [1]Можно запустить этот скрипт вручную:
...
WB_Doc : IHTMLDocument2;
WB_HTMLWindow : IHTMLWindow2;
...
Begin
...
WebBrowser1.Document.QueryInterface(IHTMLDocument2, WB_Doc);
if WB_Doc = nil then Error("При получении интерфейса взаимодействия с браузером возникла ошибка.");
WB_HTMLWindow := WB_Doc.parentWindow;
if WB_HTMLWindow = nil then Error("При получении интерфейса окна возникла ошибка.");
WB_HTMLWindow.ExecScript("MyScript(100, 200, 300)", "JavaScript");
← →
stas © (2010-07-19 16:54) [2]И. Павел © (19.07.10 13:54) [1]
Спасибо, нашел чуть проще.
OleVariant(selectField as IHTMLElement).FireEvent("onchange");
← →
stas © (2010-07-21 16:16) [3]Теперь возник следующий вопрос, как дождаться окончания выполнения java скрипта ?
Заранее благодарен.
← →
Дмитрий С © (2010-07-22 09:15) [4]
> Теперь возник следующий вопрос, как дождаться окончания
> выполнения java скрипта ?
>
Реализовать OnGetExternal ?
← →
И. Павел © (2010-07-22 09:28) [5]> [3] stas © (21.07.10 16:16)
А мой метод ждет выполнения скрипта и только потом возвращает управление программе :)
← →
stas © (2010-07-22 10:13) [6]И. Павел © (22.07.10 09:28) [5]
Да там параметры нужно передавать :)
Дмитрий С © (22.07.10 09:15) [4]
это как ?
← →
анонимно (2010-07-22 17:17) [7]
> это как ?
У обычного TWebBrowser-а нет такого события. Два варианта, либо реализовать самому (не знаю как), либо поставить компонент TEmbeddedWB (более реализованный TWebBrowser).
Там есть событие OnGetExternal в коде которого ты должен передать браузеру ссылку на твой объект, реализующий позднее связывание (интерфейс IDispatch). Это не сложно сделать, в дельфи есть возможность "научить" почти любой объект поддерживать этот интерфейс.
В коде страницы на javascript-е ты можешь обращаться к объекту очень просто:
external.SomeMethod(someParams);
Более того, в параметрах можно передавать объекты javascript и выполнять их методы из delphi.
Могу дать пример.
← →
stas © (2010-07-22 17:34) [8]анонимно (22.07.10 17:17) [7]
Спасибо
TEmbeddedWB - установлен. Попробую.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c