При разработке интернет приложений на Delphi рано или поздно приходится сталкиваться с JavaScript. Часто необходимо выполнить какую-либо функцию из JavaScript программы, которая может находится непосредственно в html коде страницы, с которой вы работаете, или же по некоторому URL, с которого необходимо скачать программу на JavaScript. Исследуя html код мы можем понять, какую JavaScript функцию и с какими аргументами нам необходимо вызвать, но как это сделать на Delphi?
Выполнить
JavaScript на Delphi можно только с использованием
TWebBrowser, который умеет выполнять
JavaScript код. Не писать же самостоятельно интерпретатор... Однако вызов и исполнение
JavaScript функций при помощи
TWebBrowser не кажутся на первый взгляд простым делом. На самом деле не все так сложно, в сети можно найти множество примеров того, как это можно сделать. Но писать каждый раз код вызова той или иной функции не профессионально. Возникает желание написать какой либо класс, который может загружать и исполнять любые
JavaScript функции с любыми аргументами. В этой статье представлен такой класс
TDelphiJS на
Delphi, скачать который можно по
этой ссылке.
Использование класса
TDelphiJS рассмотрим на примере вычисления хэша MD5 введенного пароля популярного форума
vBulletin версии 3, который надо передать на сервер форума при авторизации. Хэш MD5 вычисляется с помощью
JavaScript функции, которая находится в файле по относительному адресу
/clientscript/vbulletin_md5.js?v=371 (для версии
vBulletin 3.71). Для вычисления хэша MD5 необходимо скачать
JavaScript файл и выполнить функцию
md5hash с четырьмя аргументами. Первый аргумент - пароль в незашифрованном виде, второй и третий - это
out переменные, в которых возвращается значение хеша MD5 пароля. В четвертом аргументе просто передается ноль. При помощи класса
TDelphiJS получение хэша будет выглядеть следующим образом:
js:=TDelphiJS.Create;
js.LoadFromURL('http://vbulletin_forum.ru/clientscript/vbulletin_md5.js?v=371');
js.DeclareVariable('mypassword');
js.DeclareVariable('');
js.DeclareVariable('');
js.DeclareVariable('');
js.Execute('md5hash');
ShowMessage(js.GetVariable(2));
Как мы видим, использование класса очень простое. При помощи метода LoadFromURL мы загружаем JavaScript код. Затем определяем столько переменных, сколько требуется для нашей функции. В нашем случае четыре переменные. Первая из них должна содержать значение пароля, остальные две переменные являются out переменными, поэтому значений при их определении не задается. Затем мы просто выполняем JavaScript функцию с требуемым именем md5hash. Для получения значения out переменной вызываем метод GetVariable с номером out переменной.
Если JavaScript функция непосредственно возвращает значение, то для его получения используем вызов метода GetVariable(0).
Загрузить JavaScript также можно просто из строки при помощи метода LoadFromText(Text: string) либо просто из локального файла при помощи метода LoadFromFile(FileName: string).
Для вызова другой JavaScript функции необходимо предварительно очистить список переменных методом ClearVariables, заново определить требуемые переменные и выполнить JavaScript функцию.
Смотрите также:
Оставьте свой комментарий
Вы должны быть авторизированны, чтобы оставить комментарий.
Выполнить JavaScript на Delphi можно только с использованием TWebBrowser, который умеет выполнять JavaScript код. Не писать же самостоятельно интерпретатор…
Это заблуждение.