我正在尝试使我的Android网络浏览器仅打开特定的网址。因此,我想检查已加载的url是否满足要求,并根据该要求执行某些操作。我看到了许多有关WebView的答案,但是由于必须使用开源浏览器(Mozilla Firefox),所以我使用的是壁虎。这是我的代码,我尝试使用onLoadRequest进行操作,但是我不知道如何使其工作。谢谢。
@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.open(runtime);
view.setSession(session);
session.loadUri("https://www.google.com");
GeckoSession.NavigationDelegate.LoadRequest loadRequest=new GeckoSession.NavigationDelegate.LoadRequest();
session.getNavigationDelegate().onLoadRequest(session,loadRequest);
}
@Override
public void onLoadRequest(GeckoSession session, GeckoSession.NavigationDelegate.LoadRequest request)
{
if(request.uri.contains("mail"))
GeckoResult.fromValue(AllowOrDeny.ALLOW);
else
GeckoResult.fromValue(AllowOrDeny.DENY);
}
GeckoView在很大程度上依赖于其委托来允许对特定的机制和事件进行特定于应用程序的处理。
简而言之,有运行时和会话委托,分别在GeckoRuntime
和GeckoRuntime
上设置。通常的模式是,对于每个委托,都有一种GeckoSession
方法将委托附加到运行时或会话,唯一的例外是GeckoSession
,而在set{DelegateName}Delegate()
中设置了此例外。
Delegate方法由RuntimeTelemetry.Delegate
调用,不应由应用程序调用。
在您的情况下,您想实现RuntimeTelemetry.Delegate
并在GeckoRuntimeSettings
上设置实现以覆盖默认的顶级页面加载行为。
GeckoRuntimeSettings
有关更多详细信息,请参阅GeckoView
和NavigationDelegate
实现。