GeckoView в значительной степени полагается на своих делегатов, чтобы обеспечить специфичную для приложения обработку c большинства соответствующих механизмов и событий.
Короче говоря, существуют делегаты времени выполнения и сеанса, установленные на GeckoRuntime
и GeckoSession
соответственно. Общая схема такова, что для каждого делегата есть метод set{DelegateName}Delegate()
для присоединения делегатов к среде выполнения или сеансу с одним исключением, равным RuntimeTelemetry.Delegate
, которое устанавливается вместо GeckoRuntimeSettings
.
Методы делегатов вызываются GeckoView
и не должны вызываться приложением.
В вашем случае вы хотите реализовать NavigationDelegate
и установить реализацию на GeckoSession
чтобы переопределить поведение загрузки страницы верхнего уровня по умолчанию.
class MyNavigationDelegate implements GeckoSession.NavigationDelegate {
@Override
public GeckoResult<AllowOrDeny> onLoadRequest(
final GeckoSession session,
final LoadRequest request) {
// TODO: deny/allow based on your constrains.
}
// TODO: You should implement the rest of the delegate to handle page load
// errors and new session requests triggered by new-tab/window requests.
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GeckoView view = findViewById(R.id.geckoView);
GeckoSession session = new GeckoSession();
GeckoRuntime runtime = GeckoRuntime.create(this);
session.setNavigationDelegate(new MyNavigationDelegate());
session.open(runtime);
view.setSession(session);
session.loadUri("https://www.google.com");
}
Для получения более подробной информации, пожалуйста, обратитесь к справочнику по API и к примеру GeckoView .