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

Как выполнить JavaScript в TWebBrowser в режиме EdgeOnly и решить проблемы с TEdgeBrowser в Delphi

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

Работа с JavaScript в TWebBrowser (EdgeOnly) и решение проблем TEdgeBrowser в Delphi

В этой статье мы рассмотрим, как выполнять JavaScript в компоненте TWebBrowser при работе в режиме EdgeOnly, а также разберем распространенные проблемы с компонентом TEdgeBrowser в Delphi и способы их решения.

Выполнение JavaScript в TWebBrowser (EdgeOnly)

Хотя TWebBrowser в режиме EdgeOnly использует движок Edge (WebView2), он не предоставляет прямого метода для выполнения JavaScript, в отличие от TEdgeBrowser. Однако это возможно реализовать через интерфейсы COM.

Вот пример выполнения JavaScript в TWebBrowser:

procedure ExecuteJavaScript(WebBrowser: TWebBrowser; const Script: string);
var
  Document: IDispatch;
  HTMLDocument: IHTMLDocument2;
  Window: IHTMLWindow2;
  OleResult: OleVariant;
begin
  Document := WebBrowser.Document;
  if not Assigned(Document) then Exit;

  if Document.QueryInterface(IHTMLDocument2, HTMLDocument) = S_OK then
  begin
    Window := HTMLDocument.parentWindow;
    if Assigned(Window) then
    begin
      try
        Window.execScript(Script, 'JavaScript');
      except
        on E: Exception do
          ShowMessage('Ошибка выполнения JavaScript: ' + E.Message);
      end;
    end;
  end;
end;

Для получения результата выполнения скрипта можно модифицировать код:

function ExecuteJavaScriptWithResult(WebBrowser: TWebBrowser; const Script: string): string;
var
  Document: IDispatch;
  HTMLDocument: IHTMLDocument2;
  Window: IHTMLWindow2;
  OleResult: OleVariant;
begin
  Result := '';
  Document := WebBrowser.Document;
  if not Assigned(Document) then Exit;

  if Document.QueryInterface(IHTMLDocument2, HTMLDocument) = S_OK then
  begin
    Window := HTMLDocument.parentWindow;
    if Assigned(Window) then
    begin
      try
        OleResult := Window.eval(Script);
        Result := VarToStr(OleResult);
      except
        on E: Exception do
          ShowMessage('Ошибка выполнения JavaScript: ' + E.Message);
      end;
    end;
  end;
end;

Проблемы с TEdgeBrowser и их решение

Из описанной проблемы видно, что TEdgeBrowser не инициализируется, несмотря на наличие WebView2Loader.dll. Рассмотрим возможные решения.

1. Проверка событий инициализации

Убедитесь, что вы правильно подписались на события:

procedure TForm1.FormCreate(Sender: TObject);
begin
  EdgeBrowser1.OnCreateWebViewCompleted := EdgeBrowserCreateWebViewCompleted;
  EdgeBrowser1.OnProcessFailed := EdgeBrowserProcessFailed;
end;

procedure TForm1.EdgeBrowserCreateWebViewCompleted(Sender: TObject; AResult: HRESULT);
begin
  Memo1.Lines.Add('WebView создан. Результат: ' + IntToStr(AResult));
  if Succeeded(AResult) then
    EdgeBrowser1.Navigate('https://example.com');
end;

procedure TForm1.EdgeBrowserProcessFailed(Sender: TObject; 
  AErrorCode: HRESULT; const AArgs: ICoreWebView2ProcessFailedEventArgs);
begin
  Memo1.Lines.Add('Ошибка процесса WebView2: ' + IntToStr(AErrorCode));
end;

2. Проверка версии WebView2Loader.dll

Убедитесь, что используется актуальная версия WebView2Loader.dll. Вы можете скачать последнюю версию с официального репозитория Microsoft.

3. Проверка архитектуры DLL

Важно использовать правильную версию WebView2Loader.dll (x86 или x64) в соответствии с архитектурой вашего приложения. В Delphi 12.3 для Windows 11 ARM вам может потребоваться специальная версия.

4. Явное создание окружения WebView2

Попробуйте явно создать окружение перед использованием TEdgeBrowser:

procedure TForm1.Button1Click(Sender: TObject);
begin
  EdgeBrowser1.UserDataFolder := ExtractFilePath(Application.ExeName) + 'WebView2Cache';
  EdgeBrowser1.CreateWebView;
end;

5. Альтернатива: WebView4Delphi

Если проблемы с TEdgeBrowser не удается решить, рассмотрите использование альтернативного компонента WebView4Delphi, который предоставляет более современный API для работы с WebView2.

Пример использования WebView4Delphi:

procedure TForm1.Button1Click(Sender: TObject);
var
  JS: string;
begin
  // Навигация
  WebView1.Navigate('https://example.com');

  // Выполнение JavaScript после загрузки
  WebView1.OnNavigationCompleted := procedure(Sender: TObject; Args: TNavigationCompletedArgs)
  begin
    JS := 'document.title';
    WebView1.ExecuteScript(JS,
      procedure(const AResult: string; AErrorCode: HRESULT)
      begin
        if Succeeded(AErrorCode) then
          ShowMessage('Результат: ' + AResult)
        else
          ShowMessage('Ошибка: ' + IntToStr(AErrorCode));
      end);
  end;
end;

Заключение

Для выполнения JavaScript в TWebBrowser (EdgeOnly) можно использовать методы execScript или eval через COM-интерфейсы. Однако, если вам требуется более современный и надежный подход, рекомендуется использовать TEdgeBrowser или альтернативные решения, такие как WebView4Delphi.

При проблемах с TEdgeBrowser проверьте:
- Подписку на события инициализации
- Версию и архитектуру WebView2Loader.dll
- Явное создание окружения WebView2
- Альтернативные компоненты для работы с WebView2

Использование современных компонентов для работы с WebView2 предоставляет более широкие возможности и лучшее взаимодействие с JavaScript, что делает их предпочтительным выбором для новых проектов.

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

Статья посвящена работе с JavaScript в TWebBrowser (EdgeOnly) и решению распространенных проблем с компонентом TEdgeBrowser в Delphi.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-07-15 13:30:09/0.0035219192504883/0