Форум программистов, компьютерный форум, киберфорум
Alex_pac
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Delphi запуск JavaScript [jsWebBrowser 3]

Запись от Alex_pac размещена 18.07.2012 в 13:13
Показов 14356 Комментарии 1
Метки delphi, javascript

Модуль jsWebBrowser 3

http://jqbook.narod.ru/delphi/javascript.htm <<- официальная страница

Нажмите на изображение для увеличения
Название: jsEmbeded.png
Просмотров: 798
Размер:	46.3 Кб
ID:	946

Модуль позволяет легко и просто использовать JavaScript страницы через стандартный компонент TWebbrowser или TEmbededWB

Имеются функции для легкого обращения к DOM элементам страницы.

В модуле предусмотрены функции по управлению событиями элементов страницы на уровне программы.

Список типов

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
IHTMLElement = MSHTML.IHTMLElement;
  IHTMLelements = Array of IHTMLElement;
  IHTMLWindow2 = MSHTML.IHTMLWindow2;
  IHTMLElement2 = MSHTML.IHTMLElement2;
  IHTMLDocument2 = MSHTML.IHTMLDocument2;
  // короткие дубликаты типов
  Helem = MSHTML.IHTMLElement;
  Helems = Array of IHTMLElement;
  HWin = MSHTML.IHTMLWindow2;
  Helem2 = MSHTML.IHTMLElement2;
  Hdoc = MSHTML.IHTMLDocument2;
 
  TSimpleEvent = procedure of object;
Procedure TEmbeddedWB. JqueryLoad;

Процедура подключает Jquery 1.3 к любой странице.
Если уже подключен по ничего не делает.

Сам Jquery хранится в ресурсе Jquery.res

Инициализация ресурса производится автоматически. Ресурс лежит в глобальной переменной

Delphi
1
var  Jquery: TStringStream;
Procedure TEmbeddedWB. RunJS ( js:string );

Js – текст скрипта

запуск JS скрипта любого содержания, за исключением объявления функций.

они все равно будут видны только внутри этого кода, то есть неглобальны

JS разумеется, относится, и выполняет все действия на странице, которая сейчас открыта в этом TEmbeddedWB

Function TEmbeddedWB. GetJsParam ( param:string ):string;

param – выражение JS которое должно чтото вернуть в качестве строкового, логического или числового значения.

функция возращает значение JS выражения

Delphi
1
2
3
4
var str: string;
str := WEBrowser.GetJsParam('2+2'); // '4'
str := WEBrowser.GetJsParam('document.form[0].mypole.value'); // 'значение поля'
str := WEBrowser.GetJsParam('par'); // значение переменной par внутри JS
procedure TEmbeddedWB. getJsStrings( param:string; strings: TStrings );

param – выражение JS которое должно чтото вернуть в качестве одномерного массива.
процедура возвращает значение JS одномерного массива в ввиде строкового листа

Delphi
1
2
3
4
5
6
7
8
var strL: TStringList;
strL:= TStringList.Create;
WEBrowser.RunJS('var massiv = [1,4,8,34];'); // объявление массива внутри JS
WEBrowser.getJsStrings('massiv',strL); // получение значения массива
ShowMessage(strL.text);
strL.free; // после использования не забываем очищать строковый лист
// содержимое strL  - несколько строк со значениями 1,4,8,34
end;

procedure TEmbeddedWB. getElementsByClassName
(tag,classname: string; var elements: Helems; attr: string = ''; value: string = '');


Записывает в elements все элементы удоволетворяющие следующим условиям

tag = название тега
classname = принадлежность к классу
attr = название аттрибута
value = значение аттрибута

если attr = '' то фильтрация по attr игнорируется.


procedure TEmbeddedWB. getElementsByTagName
(tag:string; var elements: Helems; attr: string = ''; value: string = '');


Записывает в elements все элементы удоволетворяющие следующим условиям

tag = название тега
attr = название аттрибута
value = значение аттрибута

если attr = '' то фильтрация по attr игнорируется.


function TEmbeddedWB.getElementByTagName
(tag:string; attr: string = ''; value: string = ''):Helem;


Ищет элемент удоволетворяющий условиям

tag = название тега
attr = название аттрибута
value = значение аттрибута

если attr = '' то фильтрация по attr игнорируется.

Если элемент не найден вызывается Exception и сообщение об ошибке что элемент не найден


function TEmbeddedWB.getElementByClassName
(tag,classname: string; attr: string = ''; value: string = ''):Helem;


Ищет элемент удоволетворяющий условиям

tag = название тега
classname = название класса
attr = название аттрибута
value = значение аттрибута

если attr = '' то фильтрация по attr игнорируется.

Если элемент не найден вызывается Exception и сообщение об ошибке что элемент не найден

Function TEmbeddedWB. getElementById(tag,id:string):Helem;

Возвращает элемент-объект IHTMLelement(Helem) по id и тегу

tag – название тега для поиска
id – идентификатор элемента страницы

Если элемент не найден вызывается Exception и сообщение об ошибке что элемент не найден

function getBody: Helem2;

Возвращает объект IHTMLElement2(Helem2) соответсвующий Body страницы.

Function TEmbeddedWB. getDocument:Hdoc;

Возвращает объект IHTMLDocument2(Hdoc) соответсвующий Document страницы.

Delphi
1
2
// показать исходный код
memo1.Text:=WebBrowser1.getDocument.body.innerHTML;
Управление событиями

В модуле предусмотрены 2 процедуры. Обеспечиващие установку событий на элементы страницы, которые будут запускать события в программе.

function CreateHTMLEvent(

const Elem: Helem;
const OnEvent: TSimpleEvent

):IDispatch;


Функция проводит установку события на элемент страницы.

elem - IHTMLElement(Helem) элемент страницы
OnEvent - TSimpleEvent (procedure of Object);

Синтаксис:

Delphi
1
2
3
4
5
6
7
procedure TForm1.Button13Click(Sender: TObject);
var el:Helem;
begin
  // Delphi кнопка 3
  el:=WebBrowser1.getElementById('button','delphi_button');
  el.onclick:=CreateHTMLEvent(el, Delphi_button);
end;
в данном случаем событие Delphi_button имеет вид:

Delphi
1
2
3
4
5
procedure TForm1.Delphi_button;
begin
  ShowMessage('Кнопка 3 нажата (Событие Delphi)'+#13+'Цвет формы будет изменен');
  self.Color:=random(16777215);
end;
function DestroyHtmlEvent(const Elem: Helem):IDispatch;

Функция проводит очистку события на элементе страницы.

elem - IHTMLElement(Helem) элемент страницы

Delphi
1
2
3
4
5
6
7
procedure TForm1.Button13Click(Sender: TObject);
var el:Helem;
begin
  // Delphi кнопка 3 удалить событие
  el:=WebBrowser1.getElementById('button','delphi_button');
  el.onclick:=DestroyHtmlEvent(el);
end;
Метки delphi, javascript
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 1
Комментарии
  1. Старый комментарий

    Файлы

    Не могу найти по ссылке jswebbrowser.pas и его ресурс jquery.res

    Покажите, где, или дайте ссылку
    Запись от grigandal1580 размещена 13.12.2016 в 18:04 grigandal1580 вне форума
 
Новые блоги и статьи
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ По ссылке 403. Не очень информативно такую ссылку постить. Запись от Usaga размещена Сегодня в 06:46 . . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru