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

Ошибка отображения JavaScript API Google Maps в TWebBrowser Delphi: изменение строки пользовательского агента для решения проблемы

Delphi , Синтаксис , API реализация

Вопрос пользователя заключается в том, что при загрузке JavaScript API Google Maps в встроенный веб-браузер (TWebBrowser) из приложения на Delphi, начиная с версии 3.29, отображается сообщение об ошибке: "You are using a browser that is not supported". Проблема связана с тем, что API Google Maps проверяет строку пользовательского агента браузера, и хотя используется Internet Explorer 11, строка пользовательского агента, отправляемая серверу, некорректна.

Решение проблемы

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

Изменение строки пользовательского агента в Delphi

Для изменения строки пользовательского агента в компоненте TWebBrowser, можно использовать следующий подход:

  1. Создайте новый класс, производный от TWebBrowser, в котором переопределите метод Invoke. Этот метод необходимо настроить на возвращение желаемой строки пользовательского агента, когда запрашивается свойство DISPID_AMBIENT_USERAGENT.
  2. Затем, используя интерфейс IOleControl компонента, вызовите метод OnAmbientPropertyChange для сигнализации изменения значения свойства DISPID_AMBIENT_USERAGENT.

Пример кода на Object Pascal для создания производного класса:

type
  TCustomWebBrowser = class(TWebBrowser)
  private
    function InvokeSelf(ggi: TGUID; DispID: Integer; const args, argsSize, var result, var pExcepInfo, dwDisposalFlags: Integer; var pNameProp: POleStr): HRESULT; override;
  end;

  TWebBrowserWithCustomUserAgent = class(TCustomWebBrowser)
  public
    constructor Create(AOwner: TComponent); override;
  end;

constructor TWebBrowserWithCustomUserAgent.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  // Здесь можно установить начальное значение строки пользовательского агента
  // Например: UserAgentString := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3';
end;

function TCustomWebBrowser.InvokeSelf(ggi: TGUID; DispID: Integer; const args, argsSize, var result, var pExcepInfo, dwDisposalFlags: Integer; var pNameProp: POleStr): HRESULT; override;
begin
  if DispID = DISPID_AMBIENT_USERAGENT then
  begin
    // Здесь нужно установить строку пользовательского агента, которую хотите использовать
    // Например: System.ObjStrCopy(Result, PChar(UserAgentString), -1);
    // Возвращаем успешный результат выполнения
    Result := S_OK;
  end
  else
    Result := inherited InvokeSelf(ggi, DispID, args, argsSize, result, pExcepInfo, dwDisposalFlags, pNameProp);
end;

После изменения строки пользовательского агента, убедитесь, что вы вызовете OnAmbientPropertyChange для компонента IOleControl, чтобы уведомить веб-браузер о смене значения.

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

В случае использования FMX TWebBrowser на платформах Android и iOS, процесс изменения строки пользовательского агента может отличаться и требует дополнительных действий, таких как использование RTTI или изменения глобальных настроек.

Заключение

Изменение строки пользовательского агента в TWebBrowser позволяет корректно отображать веб-контент, требующий определенной строки пользовательского агента для работы. Важно правильно настроить эту строку, чтобы избежать конфликтов с веб-сервисами, такими как Google Maps JavaScript API.

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

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

Пользователь столкнулся с ошибкой отображения JavaScript API Google Maps в TWebBrowser на Delphi и ищет решение, связанное с изменением строки пользовательского агента для корректной работы API.


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

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




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


:: Главная :: API реализация ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 11:44:44/0.013746976852417/1