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

Решение проблемы получения URL в TWebBrowser с помощью обратных вызовов в Delphi 10.2.2

Delphi , Интернет и Сети , Браузер

В статье рассматривается проблема получения URL в компоненте TWebBrowser в среде разработки Delphi 10.2.2, использующем технологию FireMonkey. Пользователь столкнулся с ситуацией, когда при попытке получения обратного вызова (callback) при загрузке URL в методе ShouldStartLoadWithRequest не получает ожидаемого URL. Проблема связана с особенностями работы с локальными URL и политикой безопасности CORS.

Описание проблемы

При использовании компонента TWebBrowser в приложении на Delphi 10.2.2 Enterprise с технологией FireMonkey, пользователь хочет получать обратный вызов при загрузке URL, но сталкивается с проблемой: в методе ShouldStartLoadWithRequest не возвращается URL. Это происходит при работе с локальными URL, например, в формате file://.

Пользователь уже проверил несколько ресурсов и попробовал различные подходы, но проблема остаётся актуальной. В частности, он использовал следующий код:

procedure TForm2.FormCreate(Sender: TObject);
begin
  WebBrowser1.URL := 'file://' + GetCurrentDir +  '/../../index.html';
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  js : string;
begin
  js := ' var url = "file://' + GetCurrentDir +  '/../../index.html";'+
        'var encodedurl = encodeURIComponent(url);'+
        'window.location.href = encodedurl+"?67";';
  WebBrowser1.EvaluateJavaScript(js);
end;

procedure TForm2.WebBrowser1ShouldStartLoadWithRequest(ASender: TObject;
  const URL: string);
begin
  // Код для обработки URL
end;

Пользователь предполагает, что изменение URL может заставить TWebBrowser считать его новым, что позволит извлечь нужные данные, сохраняя при этом обновление страницы.

Подтверждённый ответ

Пользователь продолжил исследования и выяснил, что отправка заголовков от локального URL к локальному URL приводит к их отказу, так как браузер, следуя политике CORS, считает их некорректными. В Chrome можно отключить эту политику, но в стандартном браузере FireMonkey это не работает. В Internet Explorer 11 и Edge возможность изменения настроек безопасности была удалена, и единственный способ получения обратного вызова — использование обёртки.

В качестве временного решения пользователь нашёл библиотеку ScriptGate 1.0, которую можно скачать из менеджера пакетов GetIt. Эта библиотека позволяет использовать обратные вызовы, вызывая JavaScript-функцию из кода Delphi. Пример использования ScriptGate:

uses
  SG.ScriptGate, ...

var
  FScriptGate: TScriptGate;

procedure TForm2.FormCreate(Sender: TObject);
begin
  WebBrowser1.URL := 'file://' + GetCurrentDir +  '/../../index.html';
  FScriptGate := TScriptGate.Create(Self, WebBrowser1, 'YourOrgScheme');
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  FScriptGate.CallScript(
    'getvalue()',   // вызов JavaScript-функции getvalue
    procedure(const iResult: String)
    begin
      ShowMessage(iResult); // результат будет 67
    end
  );
end;

procedure TForm2.evalfunction;
var
  js: string;
begin
  js :=
    'function getvalue(){'+
    ' return "67";'+
    '}';
  WebBrowser1.EvaluateJavaScript(js);
end;

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

На данный момент Embarcadero не предоставила встроенной функции обратного вызова для TWebBrowser в FireMonkey, но использование обёрток, таких как ScriptGate, позволяет решить проблему в рамках текущих возможностей.

Заключение

Пользователям, столкнувшимся с аналогичной проблемой, рекомендуется использовать обёртку ScriptGate, чтобы получить обратный вызов из TWebBrowser. Это решение позволяет взаимодействовать с JavaScript-кодом страницы, что расширяет функциональность компонента. Надеемся, что в будущих версиях Delphi Embarcadero предоставит более удобные средства для работы с обратными вызовами в TWebBrowser.

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

Пользователь в Delphi 10.2.2 столкнулся с проблемой получения URL в компоненте `TWebBrowser` при работе с локальными URL, из-за чего не получает обратный вызов в методе `ShouldStartLoadWithRequest`, и пытается найти решение, используя обратные вызовы чер


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

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




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


:: Главная :: Браузер ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:57:28/0.0020549297332764/0