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

Открытие ссылок в TChromium через системный браузер: решение проблемы ```

Delphi , Технологии , DDE

Открытие ссылок в TChromium через системный браузер: решение проблемы

Введение

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

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

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

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

Основное решение

Для решения данной задачи можно использовать обработчик событий OnBeforeBrowse компонента TChromium. В этом событии необходимо проверить, что тип навигации (navType) равен NAVTYPE_LINKCLICKED, и если это так, отменить запрос для Chromium, вернув значение True в параметр Result, а затем выполнить открытие ссылки с помощью функции ShellExecute, передав ей URL запроса.

Вот пример кода на Object Pascal (Delphi), который реализует описанный подход:

uses
  ShellAPI, ceflib;

procedure TForm1.Chromium1BeforeBrowse(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest;
  navType: TCefHandlerNavtype; isRedirect: boolean; out Result: Boolean);
begin
  if navType = NAVTYPE_LINKCLICKED then
  begin
    Result := True;
    ShellExecuteW(0, nil, PWideChar(request.Url), nil, nil, SW_SHOWNORMAL);
  end;
end;

Дополнительные соображения

В коде выше нет необходимости явно устанавливать параметр Result в False, так как это значение по умолчанию для данного метода.

Альтернативное решение для CEF3

Если используется версия CEF3, то свойство navType = NAVTYPE_LINKCLICKED недоступно в событии OnBeforeBrowse. Вместо этого можно использовать свойство TransitionType, чтобы определить, что пользователь кликнул на ссылку:

procedure TfrmEditor.BrowserBeforeBrowse(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame;
  const request: ICefRequest; isRedirect: Boolean; out Result: Boolean);
begin
  case Request.TransitionType of
    TT_LINK: begin
      // Пользователь кликнул на ссылку, запустить URL в системном браузере...
      ShellExecuteW(0, nil, PWideChar(Request.Url), nil, nil, SW_SHOWNORMAL);
      Result:= True;
    end;
    TT_EXPLICIT: begin
      // Источник является другим явным действием навигации, например создание нового
      // браузера или использование функции LoadURL. Это также значение по умолчанию для
      // навигаций, где фактический тип неизвестен. Ничего не делать.
    end;
  end;
end;

Заключение

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

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

Решение проблемы открытия ссылок в TChromium через системный браузер связано с модификацией обработчика событий для перенаправления навигации на внешний браузер.


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

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




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


:: Главная :: DDE ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 09:51:39/0.0079870223999023/1