Причина такого поведения довольно простая - java библиотеки FMX часто передают в Delphi только уведомление о событии, без непосредственного влияния на процесс. Открываем библиотеку fmx.jar и смотрим код класса WebClient (package com.embarcadero.firemonkey.webbrowser;):
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)
{
super.onReceivedSslError(view, handler, error);// обработка ошибки происходит здесь по дефолту
if (this.mListener != null) {
this.mListener.onReceivedSslError(view, handler, error);//передача в Delphi лишь уведомления, что событие произошло
}
}
Одно из решений*:
1. Заменяем** код на:
public void onReceivedSslError(WebView paramWebView, SslErrorHandler paramSslErrorHandler, SslError paramSslError)
{
if (this.mListener != null) {
this.mListener.onReceivedSslError(paramWebView, paramSslErrorHandler, paramSslError);//Delphi обработчик
} else {
super.onReceivedSslError(paramWebView, paramSslErrorHandler, paramSslError);//обработчик по умолчанию
}
}
После манипуляций получаем свою версию библиотеки, мой пример здесь (Delphi Berlin).
2. Подключаем библиотеку к проекту (скриншот ниже).
3. Копируем unit FMX.WebBrowser.Android в папку своего проекта и меняем следующие строки:
procedure TAndroidWebBrowserService.TWebBrowserListener.onReceivedSslError(
P1: JWebView; P2: JSslErrorHandler; P3: JSslError);
begin
P2.proceed;//добавляем разрешение для истекших сертификатов
FWBService.FailLoadingWithError;//стандартный обработчик OnDidFailLoadWithError
end;
*Если вариант изменения кода java библиотек совсем не подходит, можно реализовать все средствами Delphi. Для этого создаем свою реализация класса WebViewClient (или WebClient) и задаем его для JWebBrowser:
//все тот же unit FMX.WebBrowser.Android;
procedure TAndroidWebBrowserService.InitUIThread;
var
lClient : TWebBrowserCLientFix;//наш класс
begin
FJWebBrowser := TJWebBrowser.JavaClass.init(TAndroidHelper.Activity);
FJWebBrowser.getSettings.setJavaScriptEnabled(True);
lClient := TWebBrowserCLientFix.Create(Self);
FJWebBrowser.setWebViewClient(lClient);//меняем на наш класс
FListener := TWebBrowserListener.Create(Self);
lClient.SetWebViewListener(FListener);
//комментируем
//FJWebBrowser.SetWebViewListener(FListener);
**Замена кода происходит по тому же сценарию, как и создание своих собственных классов на java. Если кому потребуется помощь - пишите, я помогу ответами и примером.