Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Работа с Переменными JavaScript на Веб-Странице: Чтение и Запись

Delphi , Синтаксис , Типы и Переменные

Когда вы работаете с веб-страницами, созданными с использованием JavaScript, иногда возникает необходимость доступа к переменным JavaScript из внешнего кода, например, из приложения на Delphi. В данной статье мы рассмотрим, как можно читать и записывать переменные JavaScript, используя компонент TWebBrowser в среде Delphi.

Проблема

Представим, что у вас есть веб-страница с переменными JavaScript:

<script>
  var _ANYINT = 0;
  var _ANYOBJ = 0;
</script>

И вы хотите прочитать значение переменной _ANYINT из вашего Delphi-приложения.

Решение

Для чтения и записи переменных JavaScript можно использовать интерфейс IHTMLWindow, который предоставляет функцию execScript. Однако execScript не позволяет возвращать результаты выполнения. Поэтому для доступа к данным JavaScript необходимо в вашем JavaScript-коде создать функцию, которая будет записывать требуемые данные в скрытое поле на странице, и затем из Delphi читать это поле через компонент TWebBrowser.

Пример кода на Delphi для чтения данных из скрытого поля:

function Read_ANYINT: Integer;
var
  v: OleVariant;
begin
  v := Browser.Document;
  Result := v.parentWindow._ANYINT;
end;

Если ваша страница загружена через протокол file:///, такой подход не сработает. В этом случае сначала необходимо перейти в режим 'about:blank' и затем загрузить HTML-документ из строки, используя процедуру LoadHTML.

Альтернативный способ

Существует альтернативный способ доступа к глобально определенным переменным JavaScript, заключающийся в запросе у IHTMLWindow2 значений этих переменных. Например, для чтения значения переменной myVariable:

uses
  MSHTML, ActiveX;

var
  Window: IHTMLWindow2;
  DispatchIdOfProperty: Integer;
  MyPropertyValue: OleVariant;
  Temp: TExcepInfo;
  Res: Integer;
  Params: TDispParams;
begin
  Window := (WebBrowser1.ControlInterface.Document as IHTMLDocument2).parentWindow;
  if (Window as IDispatchEx).GetDispID('myVariable', fdexNameCaseSensitive, DispatchIdOfProperty) = S_OK then
  begin
    ZeroMemory(@Params, SizeOf(Params));
    Res := (Window as IDispatchEx).InvokeEx(DispatchIdOfProperty, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, @Params, MyPropertyValue, Temp, nil);
    if Res = S_OK then
      ShowMessage(MyPropertyValue);
  end;
end;

Запись переменной аналогична чтению, но используется DISPATCH_PROPERTYPUT в вызове InvokeEx.

Работа с массивами

Для доступа к массивам JavaScript можно использовать обертку, которая позволяет работать с ними как с объектами COM. Пример такой обертки:

unit jsobj;

interface

uses
  ActiveX;

type
  TJSArrayWrapper = class
  private
    FObject: OleVariant;
    FObjectInterface: IDispatch;
    // ...
  public
    constructor Create(const AObject: OleVariant);
    // ...
    property Item[Index: Integer]: OleVariant read GetItem write SetItem; default;
    // ...
    property Length: Integer read GetLength;
  end;

implementation

// ...

end.

Использование обертки:

var
  v: OleVariant;
  i: Integer;
  lArray: TJSArrayWrapper;
begin
  v := Browser.Document.parentWindow;
  lArray := TJScriptArray.Create(v.myArray);
  try
    for i := 0 to lArray.Count - 1 do
    begin
      ShowMessage(lArray[i]);
    end;
  finally
    FreeAndNil(lArray);
  end;
end;

Заключение

В данной статье мы рассмотрели различные способы чтения и записи переменных JavaScript из приложений на Delphi, используя компонент TWebBrowser. Это может быть полезно в различных сценариях, когда необходимо взаимодействие между веб-страницами и внешним кодом.

Создано по материалам из источника по ссылке.

Работа с переменными JavaScript на веб-странице, включая их чтение и запись, а также взаимодействие с этими переменными из внешних приложений, например, из среды разработки Delphi, используя компонент `TWebBrowser`.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Типы и Переменные ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-08-16 22:19:57/0.0064070224761963/0